Nessun valore specificato per alcuni parametri necessari!!

lunedì 16 giugno 2008 - 18.35

ethan0k Profilo | Newbie

Ho il seguente codice:

con = New OleDbConnection(myConnString)

con.Open()

strSQL = "SELECT [Cognome] & ' ' & [Nome] AS Nominativo, tbl_Aziende.RagioneSociale, tbl_Presenze.IdRapporto, " & _
" tbl_UtenteAzienda.UserName, tbl_Presenze.Data, tbl_Presenze.Ore, tbl_Presenze.Stato FROM (((tbl_Rapporti INNER JOIN tbl_Presenze " & _
"ON tbl_Rapporti.Id = tbl_Presenze.IdRapporto) INNER JOIN tbl_Aziende ON tbl_Rapporti.IdAzienda = " & _
"tbl_Aziende.IdAzienda) INNER JOIN tbl_Impiegati ON tbl_Rapporti.IdImpiegato = " & _
"tbl_Impiegati.IdImpiegato) INNER JOIN tbl_UtenteAzienda ON tbl_Aziende.IdAzienda = " & _
"tbl_UtenteAzienda.IdAzienda WHERE (((tbl_UtenteAzienda.UserName)=@UserName)) " & _
"AND tblPresenze.Data Between @DataInizio AND @DataFine " & _
"ORDER BY tbl_Presenze.IdRapporto, tbl_Presenze.Data;"

DBComm = New OleDbCommand(strSQL, con)
DBComm.CommandType = CommandType.Text

DBComm.Parameters.Add("@UserName", OleDbType.VarChar, 255).Value = Page.User.Identity.Name.ToString
DBComm.Parameters.Add("@DataInizio", OleDbType.Date, 0).Value = DataInizio
DBComm.Parameters.Add("@DataFIne", OleDbType.Date, 0).Value = DataFine

DbDatareader = DBComm.ExecuteReader

arrivati all'ultima istruzione mi si blocca segnalando l'errore in oggetto. Perchè?
I parametri sono tutti valorizzati..

Dainesi Profilo | Senior Member

UserName è un dato testo e come tale va delimitato da singoli apici. Comunque, per spaccare il capello in quattro vai in Enterprise Manager e lancia SQL Analyzer e monitorizza le tracce sul server e catalogo in questione ed analizza la stringa SQL generata dalla tua interrogazione. Vedrai che da lì tutto sarà più chiaro.

alx_81 Profilo | Guru

>UserName è un dato testo e come tale va delimitato da singoli apici.
No, non corrisponde a verità. Si tratta di una query parametrica, il tipo è definito dal parametro definito nella collection dei parameters.

>Comunque, per spaccare il capello in quattro vai in Enterprise
>Manager e lancia SQL Analyzer e monitorizza le tracce sul server
>e catalogo in questione ed analizza la stringa SQL generata dalla
>tua interrogazione. Vedrai che da lì tutto sarà più chiaro.
Il problema è che l'esecuzione sembra dare un errore ancora prima di chiamare il comando.
Sostituisci i parametri nella query con il carattere "?", ad esempio:
SELECT campo1, campo2 FROM Tabella WHERE campo2 = ? AND campo3 BETWEEN ? AND ?

e poi lascia la collezione dei parametri come l'hai già definita (non mettere la size per i campi data, non mettere 0, omettila).

In alternativa, se hai sql server, usa System.Data.SQLClient e non System.Data.OLEDB.
Ciao!
--

Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

Dainesi Profilo | Senior Member

>>UserName è un dato testo e come tale va delimitato da singoli apici.
>No, non corrisponde a verità. Si tratta di una query parametrica,

Vero. Anche un Papero può sbagliare ! Anch'io uso sempre i ? per indicare i parametri.

alx_81 Profilo | Guru

>>>UserName è un dato testo e come tale va delimitato da singoli apici.
>>No, non corrisponde a verità. Si tratta di una query parametrica,
>
>Vero. Anche un Papero può sbagliare ! Anch'io uso sempre i ?
>per indicare i parametri.
Ho paura che si tratti di OLEDB..

--

Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org
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