PDA

View Full Version : [VB.NET] Dovrebbe funzionare, invece...problema query database


ASSTO
26-08-2010, 13:20
Public Function estraiProveScatole(ByVal intestazione As String, ByVal commessa As String, ByVal specifica As String, ByVal conformita As String) As DataTable
Using conn As New OleDbConnection(My.Settings.myConnectionString)
Dim query As String
Dim da As New OleDbDataAdapter
Dim ds As New DataSet
Dim comando As New OleDbCommand

comando.Parameters.Add("@commessa", OleDbType.VarChar)
comando.Parameters("@commessa").Value = commessa

comando.Parameters.Add("@intestazione", OleDbType.VarChar)
comando.Parameters("@intestazione").Value = intestazione

comando.Parameters.Add("@specifica", OleDbType.VarChar)
comando.Parameters("@specifica").Value = specifica

Dim fCommessa As String = ""
Dim fIntestazione As String = ""
Dim fSpecifica As String = ""

If commessa.Length <> 0 Then
fCommessa = " =@commessa"
Else
fCommessa = " IS NOT NULL"
End If

If intestazione.Length <> 0 Then
fIntestazione = " =@intestazione"
Else
fIntestazione = " IS NOT NULL"
End If

If specifica.Length <> 0 Then
fSpecifica = " =@specifica"
Else
fSpecifica = " IS NOT NULL"
End If

query = "SELECT * FROM proveScatola WHERE intestazione" & fIntestazione & " AND specifica" & fSpecifica & " AND commessa" & fCommessa & " ORDER BY dataProva ASC"

My.Application.Log.WriteEntry(query)

comando.CommandText = query
comando.Connection = conn
da.SelectCommand = comando

da.Fill(ds, "tab1")

Return ds.Tables("tab1")

End Using
End Function

Questa funzione dovrebbe servirmi ad effettuare una query su un database e restituire una datatable. La funzione ha 4 parametri (il parametro conformita ancora non è stato implementato quindi di fatto è inutilizzato), i quali se passati vengono ricercati, altrimenti vengono sostituiti da "IS NOT NULL".

Il problema è che la ricerca restituisce i risultati corretti solo con il parametro commessa o senza nessun parametro (in questo caso restituisce l'intero recordset): se inserisco solo il parametro "specifica" o solo quello "intestazione" la datatable restituita è vuota.
Ho controllato:
1) i nomi delle righe nella query sono corretti
2) nella tabella del db esistono dei record contenenti i parametri che passo
3) i campi del database access sono tutti di tipo testo

La cosa molto strana è che ieri funzionava solo con il parametro intestazione. Poi ho riscritto il codice (non so se uguale ma sicuramente quello vecchio non era diametralmente diverso) ed ora funziona solo con il parametro commessa.

Vedete qualche cosa che non va?

ASSTO
26-08-2010, 13:54
Ho notato un'altra cosa. Ho un record set così composto:

Record 1
ID: 1
commessa: 1
specifica: 1
intestazione: franco

Record 2
ID: 2
commessa: 2
specifica: 2
intestazione: carlo

Se non passo nessun parametro, la datatable contiene entrambi i record (query: "SELECT * FROM proveScatola WHERE commessa IS NOT NULL AND specifica IS NOT NULL and intestazione IS NOT NULL")
Se passo il parametro commessa con valore "1", la dt contiene solo il record 1.
(query: "SELECT * FROM proveScatola WHERE commessa =@commessa AND specifica IS NOT NULL and intestazione IS NOT NULL")

Se passo il parametro intestazione con valore "franco", la dt è vuota.
(query: "SELECT * FROM proveScatola WHERE commessa IS NOT NULL AND specifica IS NOT NULL and intestazione =@intestazione")

Se passo i parametri commessa e intestazione con valori rispettivamente "1" e "franco", la dt contiene solo il record 1.
(query: "SELECT * FROM proveScatola WHERE commessa =@commessa AND specifica IS NOT NULL and intestazione =@intestazione")

Se passo i parametri commessa e intestazione con valori rispettivamente "1" e "carlo", la dt è giustamente vuota.

HELP!

ASSTO
27-08-2010, 00:05
Nessno ha idee su cosa controllare?

ASSTO
27-08-2010, 22:44
Eddai ragazzi... :)