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