Lettura record con datareader

giovedì 29 luglio 2004 - 15.52

fguida Profilo | Expert

Ciao, ecco la mia richiesta: ho due solution distinte: in una ho una form, nell'altra la dll. Eseguo la lettura di una tabella di un db in questo modo:

public string Record() //legge il db
{
string str = "select * from Area";
SqlCommand myCommand = new SqlCommand(str, Conn);
SqlDataReader dr = myCommand.ExecuteReader();
string Mia = "";
while (dr.Read())
{
Mia = dr["NomeArea"].ToString();
//dr.NextResult();
}
return Mia;
}
******************************************************
A questo punto devo portarla in una combobox della form, dopo aver cliccato un bottone:

private void btnQuery_Click(object sender, System.EventArgs e)
{
cmbElenco.Text = conn.Record();
}
******************************************************
Come faccio a scorrere il datareader e popolare la combo?
Grazie mille

Brainkiller Profilo | Guru

Non credo sia necessario scorrere il DataReader.
E' sufficiente usare un DataAdapter e un DataSet, riempirlo e poi usare questo codice:

combo.DataSource = ds;
combo.DisplayMember = "colonnadisplay";
combo.ValueMember = "colonnavalore";

Dove combo è il combobox, ds il DataSet, colonnadisplay la colonna del database in cui c'è il testo che vuoi rappresentare sulle varie voci del combobox e colonna valore invece il valore collegato.

ciao
david

fguida Profilo | Expert

Ottimo, proverò appena possibile; solo un'ulreriore domanda.. come mai mi sconsigli l'uso del datareader? ci sono dei problemi nel suo utilizzo o solo una questione di 'prestazioni'?
Grazie

Francesco

fguida Profilo | Expert

Inoltre.. per passare il risultato alla forma dalla .dll distaccata.. come faccio? MI sembra che con il return posso passare un solo valore....

Brainkiller Profilo | Guru

Te lo sconsiglio perchè tu volevi fare ciclare il DataReader e non ha senso perchè perdi cicli di clock e tempo a scrivere istruzioni che non servono visto che c'è il DataBinding.

Da una funzione puoi ritornare qualsiasi cosa, tipi base come interi o stringhe, strutture, classi, quindi DataSet o altro.

ciao
david

fguida Profilo | Expert

Ottimo; passando il ds(dataset) come output nella return, devo fare il tostring.. altrimrenti mi da errore. Ma poi, passando dalla classe database della dll alla form . le proprietà del dataset restano invariate? A m non sembra dato che non lo riconosce....

F.

Brainkiller Profilo | Guru

>Ottimo; passando il ds(dataset) come output nella return, devo fare il tostring..

Perchè devi fare il ToString() scusa ?

E chiaro che se hai un prototipo di funzione del tipo:

public string NomeMetodo()

non puoi ritornare un DataSet e ti dirà di castarlo a String.
Prova con:

public DataSet NomeMetodo()

Si il DataSet è una struttura in memoria se lo passi ad una funzione all'interno di una classe o altrove mantiene le proprietà.
ciao
david

fguida Profilo | Expert

mmm..non vuol proprio funzionare.. non è che posso mandarti una mail con il codice da esaminare senza che ti scrivo qui 100 post?

fguida Profilo | Expert

Praticamente io ho creato due piccole solution; in una creo una dll che esegue iul settaggio,l'apertura e la chiusura della connessione, assieme alla creazione del data adapter e dataset.

Nell'altra ho la form, che richiama i metodi della classe creata nella dll. Vorrei quindi poter utilizzare il dataset della .dll nella form, e popolare così una combobox.
Grazie per l'aiuto che mi date... posso assicurarvi che ci sto 'grugnando' parecchio.

Francesco

fguida Profilo | Expert

Si... lo so..il fatto è che nela form io ho creato una funzione, ma mi ritorna un solo parametro. David mi disse di poter portare tutto il dataset nella form, ma non riesco.. mi fa portre solo un return trasformato in .tostring() dalla dll alla form...

fguida Profilo | Expert

Nulla da fare... certamente non rinuncio, ma non capisco prorpio come portare il dataSet in nela form!

F.

fguida Profilo | Expert

E'... sta nel fatto che il ds non me lo fa ritornare come lo hai scritto tu... mi da errore...


public string Record() //legge il db
{
SqlConnection Conn = new SqlConnection("Data Source=suiteserver;Initial Catalog=Corsi;User Id=sa;Password=server");
Conn.Open();
string str = "select * from Area";
SqlDataAdapter da = new SqlDataAdapter(str, Conn);
DataSet ds = new DataSet();
da.Fill(ds,"Utente");

return ds;


Messaggio di errore: Cannot implicitly convert type 'System.Data.DataSet' to 'string'

Cosa mi suggerisci?

fguida Profilo | Expert

Bene, un errore l'ho trovato, e riguarda questo; invece di scrivere:

public DataSet Record()

scrivevo

public string Record()

ed è logico ottenre un messaggio di errore...!!! Chiedo venia, ma Vi ringrazio per tanto l'aiuto

Francesco
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5