Errore 42000 MySql ASP.NET

lunedì 21 luglio 2008 - 18.38

ravalon Profilo | Expert

Ciao a tutti...

durante l'estrazione dei dati da un sito che usa ASP.NET 2,0 e che si interfaccia a MySQL, ottengo questo errore

ERROR [42000] [MySQL][ODBC 3.51 Driver][mysqld-4.1.10a-nt]You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1

Tutto il sito usa MySQL e non ho problemi...e non capisco questo errore ...

ecco la query utilizzata poco prima dell'errore

SELECT * FROM Magliette,Taglie,Colori,TaglieDisponibili,ColoriDisponibili WHERE Magliette.idcat=1 LIMIT 0,6

La query viene eseguita e popolo un DataReader chiamato DATI

che associo poi cosi

DataListProdottiCategoria.DataSource = Dati
DataListProdottiCategoria.DataBind()

Sapete da cosa dipende questo errore dato che nella segnalazione non viene indicato il pezzo di query sbagliato (mi da NEAR '')?

Brainkiller Profilo | Guru

>ERROR [42000] [MySQL][ODBC 3.51 Driver][mysqld-4.1.10a-nt]You
>have an error in your SQL syntax; check the manual that corresponds
>to your MySQL server version for the right syntax to use near
>'' at line 1

La query viene eseguita da un client Windows collegato a mySQL ?
Se sì, hai altre query che non funzionano ?

Non è magari per il LIMIT 0,6 ? Prova a toglierlo e vedi se funziona.

Se funziona, ti devo dire che l'ODBC Driver 3.51 è molto vecchio e per chi sviluppa applicazioni .NET (specialmente per chi usa MySQL dalla versione 3.23 in poi) è consigliato vivamente l'uso dell'ADO.NET Data Provider per MySQL contenuto nel pacchetto Connector/.NET:
http://dev.mysql.com/downloads/connector/net/5.1.html

Secondo me è qualche incompatibilità fra ODBC Provider e MySQL che nel tempo si è aggiornato ma l'ODBC Driver no.
Ciao

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

ravalon Profilo | Expert

LA query viene eseguita, è l'associazione dopo che non va...e comunque ho altre istruzioni LIMIT nel sito che non danno problemi...

Se lancio la query da dentro MySQL funziona benone, non capisco...

Hai ragione sul driver, purtroppo i siti gestiti con pannello PLESK per il momento offrono solo questo tipo di interfacciamento per cui mi devo adattare...in giro in effetti ho trovato che è un malfunzionamento del driver...

Però se le altre funzionano e la query viene correttamente interpretata per l'apertura del DataReader ci deve essere un modo per eliminare questo errore...

....ti viene in mente qualcosa ?

paoval72 Profilo | Senior Member

Ciao, puoi postare il pezzo di codice in cui usi questa select?

PV

ravalon Profilo | Expert

Questa è la chiamata all'apertura del datareader

Dim Conn as new ClassConnessione

with Conn
Call .EstraiDati(CStr("SELECT * FROM Magliette,Taglie,Colori,TaglieDisponibili,ColoriDisponibili WHERE Magliette.idcat=" & intIdCat & " LIMIT 0," & CInt(Paging)), conn.ConnettiCatalogo)


DataListProdottiCategoria.DataSource = .Dati
DataListProdottiCategoria.DataBind()

.Dati.Close()
end with


e questa la sub che fa l'estrazione, uguale per tutti il sito e che funziona ovunque (ho tolto i vari IF THEN che non servivano in questo caso)


public sub EstraiDati(ByVal strSQL As String, ByVal ObjConn As OdbcConnection)

Dim objCommand As New Odbc.OdbcCommand(CStr(strSQL), ObjConn)

Dati = objCommand.ExecuteReader

objCommand.Dispose()

end sub


DATI è definito cosi in un modulo

Public Dati As OdbcDataReader

Brainkiller Profilo | Guru

Puoi provare ad usare un DataAdapter e fare un Fill dentro un DataSet e vedere se funzia almeno così ?
Ciao

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

ravalon Profilo | Expert

Purtroppo non lo so usare

Brainkiller Profilo | Guru

>Purtroppo non lo so usare

Eh dai è facilissimo:

Dim objDa as OdbcDataAdapter Dim ds as New DataSet objDa=new OdbcDataAdapter("SELECT * FROM TABELLA",conn) objDa.Fill(ds); DataListProdottiCategoria.DataSource = ds DataListProdottiCategoria.DataBind()

Specifichi una query, poi chiami il Metodo Fill e il contenuto della query, ossia il recordset di risultati va a finire nel DataSet. Il DataSet immagino tu sappia cos'è è una specie di database ma in memoria, contiene più tabelle, releazioni, righe, ecc.

Poi lo puoi assegnarlo a un controllo come DataListProdottiCategoria e fare il DataBind().

Più che altro per capire se il DataSet viene riempito o va in errore anche il metodo Fill()
Ciao

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

ravalon Profilo | Expert

Grazie intanto...

ho provato e ottengo questo tipo di errore

"Riferimento ad un oggetto non impostato su un'istanza di oggetto"

Dopodichè ottengo lo stesso identico errore 42000

che significa ?

ravalon Profilo | Expert

Ho trovato la soluzione al mio problema...

purtroppo mi devo scusare ma era dovuto ad un'altra query SQL non passata al controllo dei blocchi TRY CATCH per cui non mi ero accorto..
inoltre ero stato confuso dal fatto che nel messaggio di errore non mi venisse detto quasi niente su quale pezzo di query ci fossero problemi (mi metteva NEAR '')

Quindi ok, il problema era che c'era un'altra query dopo quella che pensavo fosse incriminata che non veniva passata con tutti i parametri necessari

Grazie a voi per l'aiuto in ogni caso
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-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5