Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
App. WinForms / WPF .NET
Recordcount
mercoledì 20 dicembre 2006 - 16.43
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
clan
Profilo
| Junior Member
161
messaggi | Data Invio:
mer 20 dic 2006 - 16:43
salve
qualcuno sa come sia possibile contare i record utilizzando un datareader
per essere più chiaro quello che in vb6 era
record.recordcount
Grazie
alextyx
Profilo
| Expert
668
messaggi | Data Invio:
mer 20 dic 2006 - 17:11
Io credo che la soluzione migliore sia usare una query scalare e un oggetto command. Ti invio questo esempio in cui cerco di sapere quanti sono i record della tabella TabContatti. In questo caso non ho nessun criterio di selezione (WHERE) ma avrei potuto averlo. Come vedi, uso una utile funzioncina (EseguiQueryScalareSQL) che però potrebbe essere inglobata nel codice della prima. Io la uso da più punti e mi conviene così, ma tu puoi fare diversamente. In questo caso, tra l'altro, ridonda la dichirazione della connessione da usare :
Public Function NumeroContatti() As Integer
Dim c As New OleDbCommand("SELECT COUNT (IDContatto) FROM TabContatti", GIN.CnnOle)
NumeroContatti = CInt(c.ExecuteScalar)
Return NumeroContatti
c.Dispose()
End Function
''' <summary>
''' Restituisce un oggetto che è il risultato di una query scalare (es.: COUNT,SUM,MAX,MIN, ecc...).
''' Se c'è qualche problema, restituisce un oggetto impostato a nothing
''' </summary>
''' <param name="StrSQL">Stringa SQL contenente il comando</param>
''' <returns></returns>
''' <remarks></remarks>
Public Function EseguiQueryScalareSQL(ByVal StrSQL As String) As Object
Dim C As New OleDbCommand(StrSQL, GIN.CnnOle)
Try
EseguiQueryScalareSQL = C.ExecuteScalar
Catch ex As Exception
EseguiQueryScalareSQL = Nothing
MessageBox.Show(GIN.CstInizioMessaggioErrore & ex.Message & ControlChars.CrLf & ex.StackTrace)
Finally
C.Dispose()
C = Nothing
End Try
End Function
clan
Profilo
| Junior Member
161
messaggi | Data Invio:
sab 23 dic 2006 - 20:30
ciao
ho fatto delle prove ma ExecuteScalar mi restituisce sempre uno.
Ps la relazione fra le due funzioni che hai inerito nel post precedente?
Mi sembra facciano la stessa cosa.
Ciao
alextyx
Profilo
| Expert
668
messaggi | Data Invio:
sab 23 dic 2006 - 23:03
Sì, è vero, colpa della fretta. Una è una funzione di uso generale che evita la noia di ricordarsi di eliminare gli oggetti di predisporre il try catch, ecc...
Solo che in effetti nell'esempio che ho preso....non la uso!
Comunque se la query che dai in pasto all'executescalar ha la stessa condizione WHERE, dovrebbe risultarti lo stesso numero di record che potresti scorrere con il datareader. Il datareader, a differenza del caro vecchio recordset, non ha il count e qiundi, o te li scorri tutti e li conti, o fai una query come quella che ti ho postato, oppure passi ad usare altri oggetti. Io in genere faccio tutto con datareader e command.
Prova a postare un po' di codice e vediamo se si scopre dov'è il problema!
Cteniza
Profilo
| Guru
1.509
messaggi | Data Invio:
dom 24 dic 2006 - 11:09
Un datareader è un oggetto read-only foreward-only, fino a quando non sei arrivato all'ultimo elemento non puoi sapere di quanti elementi è composto il flusso di dati.
Se hai sql server o altro server abilitato a comandi multipli puoi impostare la tua select come:
SELECT COUNT(*) FROM mytable; SELECT campo, campo, campo FROM mytable;
Questo restituisce un datareader a due livelli interrogando il primo hai il numero di records, prima di leggere il secondo.
Torna su
Stanze Forum
Elenco Threads
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 !