2016-10-05 3 views
1
Dim strSQL As String 

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 

Это дает мне «Необходимо объявить скалярную переменную ошибку„@OrderID“Ошибка при использовании параметров в ADODB

Почему?

+0

http://stackoverflow.com/questions/7076801/error-must-declare-the-scalar-variable-for-insert-statements-in-multiple-data может помочь вам – R3uK

+0

Нет, это совсем другая вещь. Речь идет о создании параметров в ADODB – ManInMoon

+0

вы проверили с профайлером, как выглядит команда вставки, отправляемая в базу данных? Может быть, вы можете найти какую-то подсказку там – GuidoG

ответ

1

Вы не можете назвать свои параметры в командной SQL текста как вы пытались сделать.

Если изменить их все просто на «?» заполнитель, то ваш код должен работать, например,

Dim strSQL As String 

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 

В этот момент не имеет значения, что вы называете их при создании параметров команды. Обратите внимание, что параметры передаются по порядковым позициям не по имени!

Если вы хотите хорошо указать параметры в своем SQL-коде, вам следует изучить создание хранимой процедуры, хотя имя вашей динамической схемы сделает это сложным.

Возможно, вы также можете использовать sp_executesql. https://msdn.microsoft.com/en-us/library/ms188001.aspx

Смежные вопросы