Soluzione migliore per estrarre un solo record

mercoledì 18 marzo 2009 - 13.22

Gianni77 Profilo | Junior Member

Capita spesso che da un database devo estrarre un solo record e mostrare in alcune textbox i valori per le modifiche.
Io attualmente utilizzo il classico sistema dell'adapter e faccio riempire la solita datatable o dataset, che avrà quindi una sola riga, cioè faccio una cosa del genere:

Dim Query As String = "SELECT * FROM PERSONE WHERE ID=" & Id Dim DataAdapter As New OleDbDataAdapter(Query, StrCo) Dim DS As New DataSet DataAdapter.Fill(DS) With DS.Tables(0).Rows(0) txtNome.Text = .Item("NOME") txtCognome.Text = .Item("COGNOME") txtFax.Text = .Item("FAX") txtEmail.Text = .Item("EMAIL") txtSito.Text = .Item("SITO") txtIndirizzo.Text = .Item("INDIRIZZO") txtCitta.Text = .Item("CITTA") txtProvincia.Text = .Item("PROV") txtCap.Text = .Item("CAP") End With DS.Dispose()

Ovviamente qui potevo utilizzare una DataTable al posto di un dataset... ma più o meno il succo è lo stesso... Non penso sia tanto elegante utilizzare questo sistema del Rows(0) e quindi estrarre i singoli item... Voi per fare una cosa del genere che soluzione adottate?

Jeremy Profilo | Guru

Ciao Gianni.
In realtà non c'è una soluzione che si possa dire migliore di un'altra.
Dipende da tanti fattori.
Esempio, dipende se vuoi/puoi gestire i dati presenti nel Db in modalità connessa o disconnessa.
Attualmente stai utilizzando la modalità disconnessa che, di solito, si adopera per *riempire* un contenitore dati(dataset) sul quale fare gli opportuni ragionamenti e modifiche del caso.
Qualora io avessi la necessità di valutare un solo Record, forse, adotterei la modalità connessa, quindi, un DataReader.


Rimango comunque a disposizione per eventuali chiarimenti.

Facci sapere....
Ciao

Gianni77 Profilo | Junior Member

Mai usato datareader... mi potresti fare un esempio col codice che ho scritto io?

Jeremy Profilo | Guru

Ciao Gianni.
Ecco il codice:

Dim Query As String = "SELECT * FROM PERSONE WHERE ID=" & Id dim Conn as new oledbConnection(ConnectionString) Dim Cmd as new OledbCommand(Query, Conn) Dim Dr as OledbDataReader = Cmd.ExecuteScalar() Dr.Read txtNome.Text = Dr("NOME") txtCognome.Text = Dr("COGNOME") txtFax.Text = Dr("FAX") txtEmail.Text = Dr("EMAIL") txtSito.Text = Dr("SITO") txtIndirizzo.Text = Dr("INDIRIZZO") txtCitta.Text = Dr("CITTA") txtProvincia.Text = Dr("PROV") txtCap.Text = Dr("CAP")

L'ho scritto senza il supporto dell'intellisense, quindi, fammi sapere se ti da qualche errore.
La logica dovrebbe comunque essere corretta.

Facci sapere....
Ciao

Gianni77 Profilo | Junior Member

Ok Jeremy ti ringrazio, non avevo mai usato questa soluzione, il codice che hai postato però contiene due errori: non hai aperto e chiuso la connessione, e bisogna usare executereader e non executescalar (con executescalar mi da un errore ostrogoto)

Dim Query As String = "SELECT * FROM PERSONE WHERE ID=" & Id dim Conn as new oledbConnection(ConnectionString) Conn.Open Dim Cmd as new OledbCommand(Query, Conn) Dim Dr as OledbDataReader = Cmd.ExecuteReader() Dr.Read txtNome.Text = Dr("NOME") txtCognome.Text = Dr("COGNOME") txtFax.Text = Dr("FAX") txtEmail.Text = Dr("EMAIL") txtSito.Text = Dr("SITO") txtIndirizzo.Text = Dr("INDIRIZZO") txtCitta.Text = Dr("CITTA") txtProvincia.Text = Dr("PROV") txtCap.Text = Dr("CAP") Cmd.Dispose() Conn.Close()

fausto1965 Profilo | Newbie

Altrimenti:
MyBindingSource.Filter("NomeCampo", MyParametro)

Il MyParametro va scritto nudo e crudo senza anteporre il segno =
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