代码之家  ›  专栏  ›  技术社区  ›  Sam Cogan

VBA事务

  •  2
  • Sam Cogan  · 技术社区  · 14 年前

    我正在尝试从excelvba向SQL中插入一些数据。SQL命令是在VBA脚本过程中生成的,其中包括一些SQL变量的使用。

    我试图了解事务在VBA中是如何工作的,以及它们是否能满足我的需要,下面的代码将对此进行测试,但它不起作用。它总是给我一个关于“Must define scalar variable@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 回复  |  直到 9 年前
        1
  •  3
  •   SQLMenace    14 年前

    你需要在一批中执行所有这些

    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)")
    

    更好的是,使用参数化查询来防止 SQL injection