admin

VBA交易

sql

我正在尝试从Excel VBA将一些数据插入SQL。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

阅读 163

收藏
2021-06-07

共1个答案

admin

您需要分批执行所有这些

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

2021-06-07