Query in vb.net con errore "tentativo non valido di lettura in assenza...

mercoledì 09 gennaio 2008 - 23.21

elet Profilo | Newbie

Salve a tutti,
sto finendo di scrivere il codice per un mio prg personale, ma mi da il seguente errore:

System.InvalidOperation Exception: Tentativo non valido di lettura in assenza di dati.
in System.Data.SqlClient.SqlDataReader.GetValue(Int32 i)
in System.Data.SqlClient.SqlDataReader.get_item(Int32 i)
in GestioneModulini.Intervento.Button1_click(Object sender, EventArgs e) in path del file .vb e nr. riga

Il codice della query che allego di seguito mi serve per incrementare il numero dell'intervento.
Praticamente nella tbl intervento c'è un contatore e poi a seconda di un diminutivo e dell'anno in corso mi aumenta il progressivo dell'intervento.
In realtà mi crea l'errore di cui sopra.

Ecco il codice della query che lancio direttamente da VB dopo aver clicckato su un Button:
---------------
sqlUpdate = "update tbl_intervento set Chiavenum = (1 + coalesce (( select max(ChiaveNum) from tbl_intervento where diminutivo = '" + Diminutivo_cli + "' and Anno = '" + AnnoRif + "' and idintervento < '" + ID_Intervento + "' ) , 0 )) where IDIntervento = '" + Temp_Numero_Intervento + "'"
---------------

Ringrazio in anticipo e qualsiasi suggeriemnto è ben accetto.

PS: Sono nuovo in VB.NET e il prg l'ho scritto di sana pianta aiutandomi con la guida in linea e grazie ai forum.

Saluti

Cristian

SSUPERPIPPO Profilo | Guru

>Salve a tutti,

Ciao

>sto finendo di scrivere il codice per un mio prg personale, ma
>mi da il seguente errore:
>
>System.InvalidOperation Exception: Tentativo non valido di lettura
>in assenza di dati.
> in System.Data.SqlClient.SqlDataReader.GetValue(Int32 i)
> in System.Data.SqlClient.SqlDataReader.get_item(Int32 i)
>in GestioneModulini.Intervento.Button1_click(Object sender, EventArgs
>e) in path del file .vb e nr. riga

Il messaggio dice già tutto: stai tentando di leggere da un DataReader che non contiene dati.

>
>Il codice della query che allego di seguito mi serve per incrementare
>il numero dell'intervento.
>Praticamente nella tbl intervento c'è un contatore e poi a seconda
>di un diminutivo e dell'anno in corso mi aumenta il progressivo
>dell'intervento.
>In realtà mi crea l'errore di cui sopra.
>
>Ecco il codice della query che lancio direttamente da VB dopo
>aver clicckato su un Button:
>---------------
>sqlUpdate = "update tbl_intervento set Chiavenum = (1 + coalesce
>(( select max(ChiaveNum) from tbl_intervento where diminutivo
>= '" + Diminutivo_cli + "' and Anno = '" + AnnoRif + "' and idintervento
>< '" + ID_Intervento + "' ) , 0 )) where IDIntervento = '"
>+ Temp_Numero_Intervento + "'"
>---------------

Questa è una query di aggiornamento mentre l'errore è relativo ad un problema in lettura... mmmh
per capire il tuo problema dovresti postare il codice completo del tuo button che genera l'errore...

>
>Ringrazio in anticipo e qualsiasi suggeriemnto è ben accetto.
>
>PS: Sono nuovo in VB.NET e il prg l'ho scritto di sana pianta
>aiutandomi con la guida in linea e grazie ai forum.
>
>Saluti

Ciao

>
>Cristian


http://blogs.dotnethell.it/alebadalin

elet Profilo | Newbie

Ciao,
ecco di seguito il codice completo dell'evento Button Click:

------------------
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click


'Recupero il valore del diminutivo cliente
Dim IDCliFor As String
IDCliFor = IDCliForTextBox.Text.ToString()

Dim Diminutivo_cli As String
Diminutivo_cli = GestDataSet.Tables("tbl_cli_for").Rows(IDCliFor - 1).Item("Diminutivo").ToString()
DiminutivoTextBox.Text = Diminutivo_cli

Dim ID_Intervento As String
ID_Intervento = IDInterventoTextBox.Text
MessageBox.Show("IDIntervento = " & ID_Intervento)

Dim DataCompleta As String
DataCompleta = DataInterventoDateTimePicker.Text.ToString
MessageBox.Show("Data Completa Intervento = " & DataCompleta)
Dim AnnoRidotto As String
AnnoRidotto = Microsoft.VisualBasic.Right(DataCompleta, 2)
AnnoTextBox.Text = AnnoRidotto
Dim AnnoRif As String
AnnoRif = Microsoft.VisualBasic.Right(DataCompleta, 4)
AnnoRiferimentoTextBox.Text = AnnoRif


'Mi connetto al server SQL
Dim myConnString As String = "Data Source=.\SQLEXPRESS;AttachDbFilename='C:\Programmi\Microsoft SQL Server\MSSQL.1\MSSQL\Data\Gest.mdf';Integrated Security=True;Connect Timeout=30;User Instance=True"
Dim myConnection As New SqlConnection(myConnString)
Dim myCommand As New SqlCommand()
Dim myReader As SqlDataReader
Dim sqlSelect As String
Dim sqlUpdate As String
Dim Result As String
Dim Temp_Numero_Intervento As String

Temp_Numero_Intervento = ID_Intervento
MessageBox.Show("Occhio a quello vuoto")
MessageBox.Show("Diminutivo_cli = " & Diminutivo_cli)
MessageBox.Show("AnnoRif = " & AnnoRif)
MessageBox.Show("ID_Intervento = " & ID_Intervento)
MessageBox.Show("Temp_Numero_Intervento = " & Temp_Numero_Intervento)
sqlSelect = "select max(ChiaveNum) from tbl_intervento where diminutivo = '" + Diminutivo_cli + "' and Anno = '" + AnnoRif + "' and idintervento < '" + ID_Intervento + "'"

'09.01.2008 modificato come di seguito:
sqlUpdate = "update tbl_intervento set Chiavenum = (1 + coalesce (( select max(ChiaveNum) from tbl_intervento where diminutivo = '" + Diminutivo_cli + "' and Anno = '" + AnnoRif + "' and idintervento < '" + ID_Intervento + "' ) , 0 )) where IDIntervento = '" + Temp_Numero_Intervento + "'"


myCommand.CommandText = sqlUpdate
myCommand.CommandType = CommandType.Text
myCommand.Connection = myConnection

Try
myConnection.Open()
myReader = myCommand.ExecuteReader
myReader.Read()
If Not (myReader(0) Is DBNull.Value) Then
Result = myReader(0)
MessageBox.Show("Result = " & Result)
Else
Result = 0
End If

Catch ex As Exception
MessageBox.Show(ex.ToString())
Finally
myConnection.Close()
End Try

Dim temp As String = Result
If temp > 0 Then
MessageBox.Show("Temp = " & temp)
Else
temp = 0
MessageBox.Show("Temp = " & temp)
End If

Dim Numero_Intervento As String

Numero_Intervento = temp + 1
ProgressivoTextBox.Text = Numero_Intervento
MessageBox.Show("Numero_Intervento = " & Numero_Intervento)

'Creo il Codice Intrevento
If Numero_Intervento < 10 Then
CodiceInterventoTextBox.Text = Diminutivo_cli + ".00" + Numero_Intervento + "." + AnnoRidotto
Else
If Numero_Intervento < 100 Then
CodiceInterventoTextBox.Text = Diminutivo_cli + ".0" + Numero_Intervento + "." + AnnoRidotto
Else
CodiceInterventoTextBox.Text = Diminutivo_cli + "." + Numero_Intervento + "." + AnnoRidotto
End If
End If

End Sub
------------------

Come puoi vedere ho fatto parecchi messagebox per vedere il risultato, ma purtroppo non riesco a venirne fuori.

Ringrazio in anticipo,
saluti Cristian

SSUPERPIPPO Profilo | Guru

Hai provato a fare una query per determinare l'ID progressivo e un'altra successiva per l'update del database?

Hai provato ad eseguire la query manualmente per vedere se funziona?

Fammi sapere, ciao

Ale

http://blogs.dotnethell.it/alebadalin

elet Profilo | Newbie

Ho fatto anche la prova di eseguire la query di select prima per poi eseguire quella di Update, ma mi da sempre lo stesso errore. Inoltre le query prima di metterle nel codice di VB le ho provate e riprovate in SQL Studio Express e sembra funzionare correttamente, ma stasera faccio un'altro paio di prove per esserne sicuro al 100%.

Grazie
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