Problema con

giovedì 18 giugno 2009 - 18.10

u_dor Profilo | Newbie

salve ragazzi, sono nuovo ma ho un problema.

ho un codice che scrive in un database sql 2005 dei dati di vario tipo ,presi da text box.
Il problema è che la query, per motivi di sicurezza, è parametrizzata in questa maniera:

Dim strconn As String = "PROVIDER=SQLOLEDB;" & ConfigurationManager.ConnectionStrings("miaconnConnectionString").ToString

Dim cn As OleDb.OleDbConnection
cn = New OleDb.OleDbConnection(strconn)
cn.Open()
Dim CmStr As New OleDb.OleDbCommand("INSERT INTO pippo(cod,dato1,dato2,) VALUES (@cod,@dato1,@dato2)", cn)

CmStr.Parameters.Clear()
CmStr.Parameters.AddWithValue("@cod", SqlDbType.VarChar).Value = cod.text
CmStr.Parameters.AddWithValue("@dato1", SqlDbType.VarChar).Value = dato1.text
CmStr.Parameters.AddWithValue("@dato2", SqlDbType.VarChar).Value = dato2.text

Dim NumRec As Integer = CmStr.ExecuteNonQuery
cn.Open()

RISULTATO: Dichiarare la variabile scalare "@cod".

dove sbaglio? mi sa che lo stesso codice con un db access funge.

Grazie

Jeremy Profilo | Guru

Ciao Dario.
Non sono sicuro ... ma penso che @cod sia una parola riservata, pertanto prova a sostituirle il nome di quel parametro con @pippo.
Ad ogni modo, invece di usare il metodo AddWithValue, potresti usare l'overload del metodo Add che ti permette di passare un oggetto parameter nuovo nuovo, e valorizzarlo con l'object initializer.
Quindi:
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Facci sapere...
Ciao

u_dor Profilo | Newbie

per @cod ho già provato a cambiarla. Domani provo il codice e ti faccio sapere. Grazie

u_dor Profilo | Newbie

niente, non va anche perchè è in VB la pagina.

Ho provato con:

CmStr.Parameters.Add(New OleDbParameter("@Cod", OleDbType.VarChar)).Value = maxcod.ToString

ma mi da lo stesso errore...

alx_81 Profilo | Guru

ciao
@cod non è una parola riservata, comunque ho provato a fare un esempio, partendo da questa stored procedure:

CREATE PROC dbo.proc_prova @cod varchar(10) AS BEGIN SET NOCOUNT ON; SELECT @cod END

intanto ti consiglio di usare il codice come segue, ovvero col costrutto USING (la guida qui, http://msdn.microsoft.com/en-us/library/htd05whh(VS.80).aspx)
Sub Main() Using conn = New OleDbConnection(miaconnstr) conn.Open() Using cmd = New OleDbCommand("dbo.proc_prova", conn) cmd.CommandType = CommandType.StoredProcedure cmd.Parameters.Add("@cod", OleDbType.VarChar, 10).Value = "CIAO" Console.WriteLine(cmd.ExecuteScalar().ToString()) End Using conn.Close() End Using End Sub

Noto una virgola di troppo nella tua insert, ma credo che se hai ottenuto l'errore di variabile tu l'abbia già corretto.
Il problema comunque sta nel fatto che tu usi OLEDB, per sql usa il SQLClient come namespace e vedrai che non avrai più problemi. Se hai necessità di usare oledb, i parametri con la @ non funzionano. Devi usare come placeholder i ?, e poi dichiarare i parametri posizionalmente. Il tuo codice diventa:

Using cn = New OleDbConnection(connstr) cn.Open() Using CmStr = New OleDbCommand("INSERT INTO pippo(cod,dato1,dato2) VALUES (?,?,?)", cn) CmStr.Parameters.Clear() CmStr.Parameters.AddWithValue("@cod", SqlDbType.VarChar).Value = "CIAO" CmStr.Parameters.AddWithValue("@dato1", SqlDbType.VarChar).Value = "MIAO" CmStr.Parameters.AddWithValue("@dato2", SqlDbType.VarChar).Value = "BAU" Dim NumRec As Integer = CmStr.ExecuteNonQuery End Using cn.Close() End Using

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

u_dor Profilo | Newbie

grazie alex.

La virgola è un errore che ho inserito solo sul forum perchè in realtà la query è molto + lunga.

Cmq ho trasformato tutto con SQLClient come namespace, era la scelta + logica.

Grazie ancora.

alx_81 Profilo | Guru

>grazie alex.
se ritieni che ti abbia aiutato, accetta la risposta così chiudiamo il thread.
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

u_dor Profilo | Newbie

fatto, grazie ancora
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-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5