Erreur lors de l'utilisation de parameters dans ADODB

Dim strSQL As Ssortingng strSQL = "INSERT INTO [" & AccountCode & "].[Orders] ( OrderID,OrderDate,BarUTC,OrderUTC,Exchange,Symbol,OrderSignedAmount,OrderPrice,Type,TargetPosition,AccountIdent,Status)" _ & " VALUES ( @OrderID,@OrderDate,@BarUTC,@OrderUTC,@Exchange,@Symbol,@OrderSignedAmount,@OrderPrice,@Type,@TargetPosition,@AccountIdent,@Status)" Dim cmd As New ADODB.Command Set cmd.ActiveConnection = objMyConn cmd.CommandText = strSQL cmd.CommandType = adCmdText cmd.NamedParameters = True SeqNum = SeqNum + 1 AccountIdent = AccountCode + ":" + ModelCode cmd.Parameters.Append cmd.CreateParameter("@OrderID", adInteger, adParamInput, -1, SeqNum) cmd.Parameters.Append cmd.CreateParameter("@OrderDate", adDate, adParamInput, 0, Date) cmd.Parameters.Append cmd.CreateParameter("@BarUTC", adDBTimeStamp, adParamInput, 0, Time) cmd.Parameters.Append cmd.CreateParameter("@OrderUTC", adDBTimeStamp, adParamInput, 0, Time) cmd.Parameters.Append cmd.CreateParameter("@Exchange", adVarChar, adParamInput, -1, "Future") cmd.Parameters.Append cmd.CreateParameter("@Symbol", adVarChar, adParamInput, -1, Symbol) cmd.Parameters.Append cmd.CreateParameter("@OrderSignedAmount", adInteger, adParamInput, , TargetPosition) cmd.Parameters.Append cmd.CreateParameter("@OrderPrice", adDouble, adParamInput, , -1) cmd.Parameters.Append cmd.CreateParameter("@Type", adVarChar, adParamInput, -1, "MARKETIOC") cmd.Parameters.Append cmd.CreateParameter("@TargetPosition", adInteger, adParamInput, , TargetPosition) cmd.Parameters.Append cmd.CreateParameter("@AccountIdent", adVarChar, adParamInput, -1, AccountIdent) cmd.Parameters.Append cmd.CreateParameter("@Status", adVarChar, adParamInput, -1, "NEW") cmd.Execute 

Cela me donne un "Doit déclarer l'erreur de variable scalaire" @OrderID "

Pourquoi?

Vous ne pouvez pas nommer vos parameters dans le text de la command SQL comme vous avez essayé de le faire.

Si vous changez tous simplement le "?" espace réservé alors votre code devrait fonctionner, par exemple

 Dim strSQL As Ssortingng strSQL = "INSERT INTO [" & AccountCode & "].[Orders] ( OrderID,OrderDate,BarUTC,OrderUTC,Exchange,Symbol,OrderSignedAmount,OrderPrice,Type,TargetPosition,AccountIdent,Status)" _ & " VALUES ( ?,?,?,?,?,?,?,?,?,?,?,?)" Dim cmd As New ADODB.Command Set cmd.ActiveConnection = objMyConn cmd.CommandText = strSQL cmd.CommandType = adCmdText cmd.NamedParameters = True SeqNum = SeqNum + 1 AccountIdent = AccountCode + ":" + ModelCode cmd.Parameters.Append cmd.CreateParameter("@OrderID", adInteger, adParamInput, -1, SeqNum) cmd.Parameters.Append cmd.CreateParameter("@OrderDate", adDate, adParamInput, 0, Date) cmd.Parameters.Append cmd.CreateParameter("@BarUTC", adDBTimeStamp, adParamInput, 0, Time) cmd.Parameters.Append cmd.CreateParameter("@OrderUTC", adDBTimeStamp, adParamInput, 0, Time) cmd.Parameters.Append cmd.CreateParameter("@Exchange", adVarChar, adParamInput, -1, "Future") cmd.Parameters.Append cmd.CreateParameter("@Symbol", adVarChar, adParamInput, -1, Symbol) cmd.Parameters.Append cmd.CreateParameter("@OrderSignedAmount", adInteger, adParamInput, , TargetPosition) cmd.Parameters.Append cmd.CreateParameter("@OrderPrice", adDouble, adParamInput, , -1) cmd.Parameters.Append cmd.CreateParameter("@Type", adVarChar, adParamInput, -1, "MARKETIOC") cmd.Parameters.Append cmd.CreateParameter("@TargetPosition", adInteger, adParamInput, , TargetPosition) cmd.Parameters.Append cmd.CreateParameter("@AccountIdent", adVarChar, adParamInput, -1, AccountIdent) cmd.Parameters.Append cmd.CreateParameter("@Status", adVarChar, adParamInput, -1, "NEW") cmd.Execute 

À ce stade, peu importe ce que vous les appelez lorsque vous créez les parameters de command. Prenez note que les parameters sont transmis par la position ordinale pas par le nom!

Si vous voulez bien nommer les parameters dans votre code SQL, vous devriez envisager de créer une procédure stockée, bien que le nom de votre schéma dynamic rende cette tâche difficile.

Vous pouvez éventuellement utiliser sp_executesql . https://msdn.microsoft.com/en-us/library/ms188001.aspx