【问题标题】:Using transcations and parameters in ADO in VBScript在 VBScript 的 ADO 中使用事务和参数
【发布时间】:2011-07-07 19:10:30
【问题描述】:

我对 ADO、VBScript 和 Access 中的参数和事务感到有些困惑。基本上,我正在处理一个巨大的循环并将结果写入数据库,所以我需要将它包装在一个事务中,否则它需要很长时间。

我已经编写了以下脚本,它适用于单个参数,(虽然这似乎有点长的路要走,所以如果有人知道更短的方法,请大喊)。但是我不知道如何将其扩展为两个参数:

objConn.BeginTrans  

  set oParm = CreateObject("ADODB.Parameter")
    oParm.Value = ""
    oParm.Type = 200
    oParm.Direction = 1
    oParm.Size = 100

  Set oCmd = CreateObject("ADODB.Command")
    oCmd.ActiveConnection = objConn
    oCmd.commandText = "INSERT INTO table (field) VALUES (?)"
    oCmd.commandType = 1
    oCmd.Parameters.Append oParm


    'Big loop here that goes through lots of lines.

      oCmd.Execute ,"Field",1

    'Loop 

objConn.CommitTrans

例如,如果我想将其扩展为:

oCmd.commandText = "INSERT INTO table (field1, field2) VALUES (?,?)"

我不知道如何处理我的参数。我敢肯定我只是在这里很愚蠢,并没有完全遵循这些工作原理。

【问题讨论】:

    标签: ms-access parameters transactions vbscript ado


    【解决方案1】:

    我从未尝试过通过Execute 方法传递参数值,所以我不能完全说出哪里出了问题。我会说documentation 声明第二个参数应该是一个值的数组,所以如果你尝试Array("Field1Val", "Field2Val"),那可能会起作用。

    我通常做的是给每个参数一个名字,然后你可以在你的循环中引用它来改变它的值。您可以使用任何您喜欢的名称,只要每个参数都有一个唯一的名称。举个例子:

    ' Sometime before your loop
    oParm.Name = "foobar"
    
    ' Start loop
        oCmd.Parameters("foobar").Value = "someValue"
        oCmd.Execute , , 1
    ' End loop
    

    就缩短代码而言,我能提出的唯一建议是使用CreateParameter 方法来创建参数。这将允许您在一行上设置所有相关属性。

    Set oParm = oCmd.CreateParameter("foobar", 200, 1, 100)
    

    【讨论】:

    • 啊,太棒了。这确实为我指明了正确的方向。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多