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
Query in vb.net con errore "tentativo non valido di lettura in assenza...
mercoledì 09 gennaio 2008 - 23.21
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
elet
Profilo
| Newbie
8
messaggi | Data Invio:
mer 9 gen 2008 - 23:21
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
1.095
messaggi | Data Invio:
gio 10 gen 2008 - 04:39
>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
8
messaggi | Data Invio:
ven 11 gen 2008 - 10:05
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
1.095
messaggi | Data Invio:
mar 15 gen 2008 - 00:38
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
8
messaggi | Data Invio:
mar 15 gen 2008 - 14:37
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
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 !