ciao,
ghg ha scritto:
il metodo ExecuteScalar ritorna il numero di record
E' vero che, di solito, lo si usa con una query tipo "SELECT COUNT(*) FROM tabella", ma ExecuteScalar restituisce il valore contenuto nel primo campo del primo record trovato.
Nel caso della query di Oiram restituirebbe il Cognome del primo contatto trovato.
ghg ha scritto:
io farei un ciclo
Esatto, bisogna fare un ciclo, anche perché non è detto che quella query restituisca un solo risultato. Però non userei ADODB.Connection, perché è un oggetto ormai obsoleto. La soluzione consiste nell'usare gli oggetti SqlConnection e SqlCommand, come stava facendo Oiram, ma ottenendo i risultati con il metodo ExecuteReader.
Questo metodo restituisce un DataReader che permette di ciclare i risultati ottenuti.
Vado quindi ad integrare il codice di Oiram.
Using conn As New SqlConnection("Data Source=.\SQLexpress;Initial Catalog=Pippo;Integrated Security=True")
Dim StrSelect As String = " Select Cognome, Indirizzo, Telefono From T_Contatti WHERE Nome=@Nome "
Using CmdSelect As New SqlCommand(StrSelect, conn)
CmdSelect.Parameters.AddWithValue("@Nome", TxtNome.Text)
conn.Open()
Using reader As SqlDataReader = CmdSelect.ExecuteReader()
While reader.Read() 'continuo il ciclo finché ci sono risultati da leggere
'Posso accedere ai campi con reader("nomecampo")
TxtRQ.Text = String.Format("{0} {1} {2}", reader("Cognome"), reader("Indirizzo"), reader("telefono"))
End While
End Using
conn.Close()
End Using
End Using
Bravo Oiram per l'uso dei SqlParameter e per aver dimostrato come la connessione vada tenuta aperta per lo stretto tempo necessario. Ho aggiunto al tuo codice un blocco Using perché così ti assicuri che la connessione venga distrutta anche quando viene sollevata un'eccezione (es. il db non è raggiungibile, oppure la query va in errore).
Forse devi ritoccare la query SQL perché
WHERE Nome=@Nome potrebbe restituirti più di un risultato. Quale nominativo, esattamente, vuoi mostrare in quel caso? Il primo? L'ultimo? Una concatenazione di tutti i loro recapiti?
ciao,
Moreno
Modificato da BrightSoul il 06 luglio 2014 11.24 -