Leggere dati da un datareader

mercoledì 02 agosto 2006 - 11.53

bluland Profilo | Guru

salve,
non potendo usare il medoto hasrows per problemi di ver si framework devo
leggere i dati di una query in un altro modo, ecco a me cosa serve:

fare una query, se le righe affette da questa query sono diverse da 0,
voglio leggere il risultato della query.
ho fatto cosi:

Dim sqlSuppl As String = "select count(ruolo) from users where [user] = 'gigi'" Dim cmd As New SqlCommand(sqlSuppl, Me.connOrd) Me.connOrd.Open() Dim read As SqlDataReader cmd.ExecuteScalar() Dim inte As Integer = DirectCast(cmd.ExecuteScalar(), Integer).ToString Me.conntv.Close() If inte <> 0 Then Dim comd As New SqlCommand(sqlSuppl, Me.connOrd) Me.conntv.Open() read = comd.ExecuteReader(CommandBehavior.CloseConnection) read.Read() Label1.Text = read.GetString(0).Trim Else Label1.Text = "niente" End If
nel caso in cui la query trovi una riga nel db sql, ho questo tipo di errore:

Specified cast is not valid.
su questa stringa: Label1.Text = read.GetString(0).Trim

cosa mi sfugge??? idee?
grazie

Brainkiller Profilo | Guru

>nel caso in cui la query trovi una riga nel db sql, ho questo
>tipo di errore:
>Specified cast is not valid.
>su questa stringa: Label1.Text = read.GetString(0).Trim
>cosa mi sfugge??? idee?

Fai un debug e vedi con QuickWatch cosa c'è nei vari oggetti.
Sicuro che ci sia un record disponibile ? In teoria non dovrebbe dare errore visto che GetString() restituisce una stringa e Label1.Text accetta una stringa.
Forse il problema è altrove nel codice.
CIao

David De Giacomi | Microsoft MVP
http://blogs.dotnethell.it/david/

alx_81 Profilo | Guru

> Dim sqlSuppl As String = "select count(ruolo) from users where [user] = "'gigi'"
> Dim cmd As New SqlCommand(sqlSuppl, Me.connOrd)
> Me.connOrd.Open()
> Dim read As SqlDataReader
> cmd.ExecuteScalar()
Non ti serve, lo fai già dopo!

> Dim inte As Integer = DirectCast(cmd.ExecuteScalar(), Integer).ToString
già qui non sai se l'executescalar ti torna qualcosa, quindi ti consiglio di utilizzare un try catch per gestire eventuali errori.

>Me.conntv.Close()
>If inte <> 0 Then
> Dim comd As New SqlCommand(sqlSuppl, Me.connOrd)
> Me.conntv.Open()
> read = comd.ExecuteReader(CommandBehavior.CloseConnection)
controlla se read è nothing, se non lo è, fai la read(), così eviti l'errore che già ti torna..
Se è nothing non ha righe, in questo caso.
fai: if not read is nothing then...
> read.Read()
> Label1.Text = read.GetString(0).Trim
end if
>Else
> Label1.Text = "niente"
>End If

Ciao!
Alx81 =)

http://blogs.dotnethell.it/suxstellino

bluland Profilo | Guru

aldila della confusione generale che ho ordinato tutto, e dopo tanto backup ho scoperto l'errore, in effetti c'era un cast non valido perche ho sbagliato la query infatti poiche essa ritorna un numero, per cui ho fatto cosi:

Private Function ruolo2() As String Dim s As String = "" Dim sqlSuppl As String = "select count(ao) from osm_user where [user] = 'pesante'" Dim sqlSuppl2 As String = "select ao from osm_user where [user] = 'pesante'" Dim cmd As New SqlCommand(sqlSuppl, Me.connloc) Me.connloc.Open() Dim read As SqlDataReader Dim inte As Integer = CType(cmd.ExecuteScalar(), Integer).ToString Dim comd As New SqlCommand(sqlSuppl2, Me.connloc) read = comd.ExecuteReader() If inte <> 0 Then Do While read.Read() s = read.GetString(0).ToString.Trim read.Close() Me.Connloc.Close() Return s Loop Else read.Close() Me.Connloc.Close() Return s End If End Function

grazie a tutti per l'attenzione
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-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5