Controllo procedura datareader con database mysql

mercoledì 26 maggio 2004 - 12.29

trinity Profilo | Guru

Ciao david,
sto lavorando con vbnet 2003, database mysql e un semplice tabella con 4 campi, 3 sono varchar il 4° e di tipo date

devo caricare i dati semplicemente in una listview ma mi esce il seguente errore quando faccio il read del datareader:

NO_DATA. informazioni sull'errore non disponibili.

ti posto il codice

Me.ListView1.Items.Clear()
Dim litem As ListViewItem
Dim Sublist As ListViewItem.ListViewSubItem
Dim sql As String
If Me.TextBox18.Text = "" Then
sql = "SELECT nominativo,indirizzo,sentenza,data FROM persone_fal ORDER BY nominativo"
Else
sql = "SELECT nominativo,indirizzo,sentenza,data FROM persone_fal WHERE nominativo LIKE '" & Replace(Me.TextBox1.Text, "'", "''") & "%" & "'" & "ORDER BY nominativo"
End If
cmd = New OdbcCommand(sql, db)
dr = cmd.ExecuteReader
While dr.Read
litem = ListView1.Items.Add(dr.GetValue(dr.GetOrdinal("nominativo")), 0)
Dim s As String
Sublist = litem.SubItems.Add(dr.GetString(1))
Sublist = litem.SubItems.Add(dr.GetString(2))
Sublist = litem.SubItems.Add(dr.GetString(3))
End While
dr.Close()

questa procedura si trova in un threads e se inserisco solo due campi nella select, esempio nominativo e data, mi funziona, se uso lo star(*) per indicare tutti i campi non mi funziona.

E' starno mi sai dire qualcosa?

Ciao
Fabio

Brainkiller Profilo | Guru

Apri MySQLCC e prova a passare la query.
Se il risultato è NO_DATA significa che i filtri che hai applicato sono errati visto che non ritornano risultati.

ciao
david

trinity Profilo | Guru

ho fatto altre prove e ho notato che la query che passo può selezionare solo 2 campi del database, ma la cosa bella è che su un altro pc dove c'è installato vbnet 2003 e mysql la stessa edentica procedura, stesso codice, stesso database copiato ed incollato funziona tutto perfettamente.

Non so cosa fare in quanto sul mio pc dove il database in questione non funge, altri database funzionano.

Ciao
Fabio

Brainkiller Profilo | Guru

Formatta e reinstalla Windows XP oppure usa il ripristino configurazione di sistema, dovresti risolvere :)
A parte gli scherzi è strano questo comportamento. Io ti ho detto appunto di provare con MySQLCC per verificare se effettivamente le query che lanci ritornano indietro dei dati.
Provare lo stesso programma su più computer non è proprio uguale visto che ogni computer è diverso dall'altro così come l'installazione di MySQL immagino.
Non ti tocca che fare ancora dei test e fare debug.

ciao
david

trinity Profilo | Guru

Ciao david, scusa se non te l'ho detto ma ho passato la query su mycc e funziona pefettamente non so cosa fare anche perchè come ho detto prima sullo stesso pc un altro database di mysql funziona. ti volevo chiedere anche un'latra cosa, sto utilizzando questa stringa di connessione ma volevo chiederti cosa significava la proprietà OPTION=3


db.ConnectionString = "DRIVER={MySQL ODBC 3.51 Driver};SERVER=localhost;DATABASE=WINFAIL;UID=root;PASSWORD=;OPTION=3"


Ciao
Fabio

Amodio Profilo | Expert

quel
option = 3
specifica la connessione via odbc via 3.1

guarda qui per maggiori dettagli
http://dev.mysql.com/doc/connector/odbc/en/faq_3.html

trinity Profilo | Guru

Ciao david,
l'errore NO_DATA ecc. l'ho trovato e stava nel fatto che quando caricavo la listview nella query di select vi era un campo nullo, però ho settato la tabella ad avere possibilità di valori nulli perchè nel programma può succedere che un campo di inserimento viene omesso, solo che quindi quando vado a fare il read del reader devo su ogni campo della tabella fare il controllo se è nullo?
esempio:

if dr.ISDBNULL(1)=True then
esegui
else
esegui-------dr.GetString(1)
end if

Ciao
Fabio

Brainkiller Profilo | Guru

Beh è chiaro.
Se non vuoi avere rotture di scatole per ciò che riguarda i campi NULL, progetta la tua base di dati in modo migliore e al posto di NULL usa dei blank o altro, però il NULL in alcuni casi si rivela molto utile.

ciao
david

trinity Profilo | Guru

David, ho fatto delle prove ed è confermato che il campo NULL mi mette i bastoni tra le ruote, la stessa tabella se utilizzo il riferimento e la programmazione con ADODB 7 mi funziona perfettamente. In ADO NET ho provato a fare un altro tipo di programmazione ossia passo passo con delle IF..END IF controllare se il campo della tabella fosase NULL con la proprietà
datareader.ISDBNULL(indice_colonna) ma mi esce lo stesso errore appena passo sulla colonna indiziata, come posso risolvere il problema? Nell'INSERT vorrei lascaire i campi che mi servono con il VALORE NULL, mi puoi dare una dritta?

Ciao
FABIO

trinity Profilo | Guru

David,
potrebbe essere il mio pc che sta incasinato, visto che su un'altra macchina funziona perfettamente anche senza utilizzare il metodo ISDBNULL.
Ti farò sapere dopo la formattazione del mio pc e dopo le prova.

Ciao
Fabio

Vi Profilo | Newbie

Ho sperimentato lo stesso problema con una windows application in c# con accesso ad un server dati ingres tramite driver ODBC.
Leggendo campi valorizzati con la stringa di lunghezza zero (ATTENZIONE: non è il valore null!) il codice sia del datareader sia del metodo fill del dataadapter andava in errore se l'applicativo girava sotto win 98 o win 2000; dopo più di due giorni di ricerche ho trovato i seguenti link

http://support.microsoft.com/default.aspx?scid=kb;en-us;319243

http://www.microsoft.com/downloads/details.aspx?FamilyID=6ccd8427-1017-4f33-a062-d165078e32b1&displaylang=en

Per la verità, effettuando le operazioni consigliate nella pagina del primo link non è avvenuto nulla di valido, mentre installando l'ODBC .NET Data Provider
(dalla pagina del secondo link) tutto ha iniziato a funzionare regolarmente senza dover ricorrere a soluzioni casareccie del tipo di forzare il valore del campo a contenere un blank oppure concatenare uno spazio con il nome del campo nella stringa SQL ecc...

Brainkiller Profilo | Guru

Grazie delle info che saranno sicuramente utili per chi ne ha bisogno.

ciao
david

Vi Profilo | Newbie

Riguardo il problema dell'accesso a campi contenenti una stringa nulla è necessaria una precisazione:

Ho installato lo stesso programma per acceder ad una base dati ingres in C# su di una seconda macchina con win 98. Dopo aver installato le patch reperibili presso i siti indicati dai link (indicati nel precedente messaggio) il programma continuava, pervicacemente, a visualizzare il messaggio d'erore NO_DATA.

La soluzione, in questo caso, è stata di effettuare un aggiornamento del sistema operativo presso il sito della Microsoft:

http://v4.windowsupdate.microsoft.com/it/default.asp


Un saluto

Vincenzo
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