Транзакции VBA - PullRequest
       7

Транзакции VBA

2 голосов
/ 10 августа 2010

Я пытаюсь вставить некоторые данные в SQL из Excel VBA. Команды SQL создаются в ходе сценария VBA и включают использование некоторых переменных SQL.

Я пытаюсь понять, как транзакции работают в VBA, и будут ли они работать с тем, что мне нужно, у меня есть код ниже, который проверит это, но он не работает. Это всегда дает мне сообщение об ошибке «Необходимо определить скалярную переменную @name», поэтому я предполагаю, что здесь есть проблема с областью действия данных / транзакции. Как мне заставить этот простой код работать?

Const stADO As String = "Provider=SQLOLEDB.1;Integrated Security=SSPI;" & _
"Persist Security Info=False;" & _
"Initial Catalog=ImportTest;" & _
"Data Source=localhost\sqlexpress"  

Set cn = New ADODB.Connection

With cn
   .CursorLocation = adUseClient
   .Open stADO
   .CommandTimeout = 0     
End With

cn.BeginTrans
cn.Execute "set implicit_transactions off"
cn.Execute ("declare @name varchar(100)")    
cn.Execute ("set @name='name'")    
cn.Execute ("Insert into test (id,name) values (55,@name)")
cn.CommitTrans    

cn.Close
Set cn = Nothing

1 Ответ

3 голосов
/ 10 августа 2010

вам нужно выполнить все это за 1 пакет

cn.Execute "set implicit_transactions off"
cn.Execute ("declare @name varchar(100)")
cn.Execute ("set @name='name'")
cn.Execute ("Insert into test (id,name) values (55,@name)")

построил строку и затем использовал 1 cn.Execute

Еще лучше, используйте параметризованные запросы для защиты от SQL injection

...