我正在尝试从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
您需要分批执行所有这些
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
SQL injection