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
Errore incomprensibile con DATAREADER
giovedì 14 ottobre 2004 - 10.12
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
elbande
Profilo
| Newbie
41
messaggi | Data Invio:
gio 14 ott 2004 - 10:12
Buongiorno,
per l'ennesima volta non riesco a capire cosa non vada. il fatto che questa volta non mi sembra ci siano errori!
In pratica: devo fare una ricerca "avanzata" su un DB, per cui do la possiblità all'utente di selezionare determinate opzioni per la ricerca costruendo in base a queste la stringa SQL da assegnare al command tramite il quale creo il datareader.
Il problema sorge quando viene eseguita la EXECUTEREADER perchè da errore "System.Data.OleDb.OleDbException" e non ne comprendo il motivo visto che l'SQL generato se dato in pasto a SQLSERVER funziona correttamente.
Come controprova ho commentato tutta la parte di costruzione della query ed utilizzato la query che mi avrebbe restituito runtime (quella che ho utilizzato per prova con SQLSERVER ) ed effettivamente funziona.
non capisco il motivo pratico del verificarsi di questo errore !
di seguito vi posto il codice da me creato:
Dim StrSQL As String
Dim Connessione As New System.Data.OleDb.OleDbConnection(StrCONN)
Dim Comando As New System.Data.OleDb.OleDbCommand(StrSQL, Connessione)
Dim Lettore As System.Data.OleDb.OleDbDataReader
StrSQL = "SELECT Nome, Descrizione"
If RA_Cosa.SelectedIndex = 0 Then 'Fase
StrSQL = StrSQL & ", P.ID_Processo, P.Nome AS Processo FROM FASI F INNER JOIN ITER I ON F.ID_Fase = I.ID_Fase INNER JOIN PROCESSI P ON I.ID_Processo = P.ID_Processo WHERE (I.ID_Ufficio = " & ID_Ufficio & ") "
If RA_Nome_Desc.Checked Then
StrSQL = StrSQL & "AND FREETEXT( Nome, '" & RA_Contenuto.Text & "' ) OR FREETEXT( Descrizione, '" & RA_Contenuto.Text & "' )"
End If
Else 'processo
StrSQL = StrSQL & ", ID_Processo AS ID, Data_Apertura, Data_Chiusura FROM ITER I INNER JOIN PROCESSI P ON I.ID_Processo = P.ID_Processo WHERE (I.ID_Ufficio = " & ID_Ufficio & ")"
If RA_Nome_Desc.Checked Then
StrSQL = StrSQL & " AND FREETEXT( Nome, '" & RA_Contenuto.Text & "' ) OR FREETEXT( Descrizione, '" & RA_Contenuto.Text & "' )"
End If
If RA_Dal.Checked Then
StrSQL = StrSQL & " AND (Data_Apertura> CONVERT(DATETIME, '" & RA_Data_Dal.Text & " 00:00:00', 103))"
If RA_Al.Checked Then
StrSQL = StrSQL & " AND (Data_Chiusura< CONVERT(DATETIME, '" & RA_Data_Al.Text & " 23:59:59', 103))"
End If
End If
End If
Debug1.Text = StrSQL
Comando.CommandText = StrSQL
Connessione.Open()
Lettore = Comando.ExecuteReader()
PS: le query funzionano in tutte le loro combinazioni se provate direttamente in SQLSERVER
grazie
marco
Ilcapitano
Profilo
| Newbie
1
messaggi | Data Invio:
gio 14 ott 2004 - 16:23
Ciao Elbande, Il tuo errore deriva dal fatto che nelle stringhe SQL non specifichi da quale tabella vuoi andare a prende i campi Nome e Descrizione; Sostanzialmente è un errore di AMBIGUITA' DELLE COLONNE.
Per correggerlo devi usare il prefisso della tabella prima del nome della colonna :
If RA_Cosa.SelectedIndex = 0 Then 'Fase
StrSQL = "SELECT F.Nome, F.Descrizione"
StrSQL = StrSQL & ", P.ID_Processo, P.Nome AS Processo FROM FASI F INNER JOIN ITER I ON F.ID_Fase = I.ID_Fase INNER JOIN PROCESSI P ON I.ID_Processo = P.ID_Processo WHERE (I.ID_Ufficio = " & ID_Ufficio & ") "
If RA_Nome_Desc.Checked Then
StrSQL = StrSQL & "AND FREETEXT( F.Nome, '" & RA_Contenuto.Text & "' ) OR FREETEXT( F.Descrizione, '" & RA_Contenuto.Text & "' )"
End If
Else 'processo
StrSQL = "SELECT P.Nome, P.Descrizione"
StrSQL = StrSQL & ", P.ID_Processo AS ID, Data_Apertura, Data_Chiusura FROM ITER I INNER JOIN PROCESSI P ON I.ID_Processo = P.ID_Processo WHERE (I.ID_Ufficio = " & ID_Ufficio & ")"
If RA_Nome_Desc.Checked Then
StrSQL = StrSQL & " AND FREETEXT( P.Nome, '" & RA_Contenuto.Text & "' ) OR FREETEXT( P.Descrizione, '" & RA_Contenuto.Text & "' )"
End If
If RA_Dal.Checked Then
StrSQL = StrSQL & " AND (Data_Apertura> CONVERT(DATETIME, '" & RA_Data_Dal.Text & " 00:00:00', 103))"
If RA_Al.Checked Then
StrSQL = StrSQL & " AND (Data_Chiusura< CONVERT(DATETIME, '" & RA_Data_Al.Text & " 23:59:59', 103))"
End If
End If
End If
elbande
Profilo
| Newbie
41
messaggi | Data Invio:
gio 14 ott 2004 - 16:27
Capitano, mio capitano!
grazie
elbande
Profilo
| Newbie
41
messaggi | Data Invio:
gio 14 ott 2004 - 16:30
cavolo, l'errore era banalissimo, mi ha fuorviato il fatto che SQL lo eseguisse comunque...
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 !