Arrays 在MS Access中的For循环中执行插入存储过程

Arrays 在MS Access中的For循环中执行插入存储过程,arrays,sql-server,ms-access,stored-procedures,bulkinsert,Arrays,Sql Server,Ms Access,Stored Procedures,Bulkinsert,我正在Microsoft Access中构建一个应用程序,它使用SQL Server作为后端。我有一些代码,可以从不同的来源提取一些客户信息,并将其存储在一个数组中。数组是动态的,元素的数量总是不同的 在本例中,数组有59个元素。现在,我执行存储过程以将此客户数据插入For循环,该循环执行存储过程59次 我一直在研究如何将数组作为参数传递,但我没有任何运气。我的代码工作得很好,但我只是想知道是否有更好、更有效的方法来完成这项工作,而不是多次执行存储过程 For i = 0 To C.lngArr

我正在Microsoft Access中构建一个应用程序,它使用SQL Server作为后端。我有一些代码,可以从不同的来源提取一些客户信息,并将其存储在一个数组中。数组是动态的,元素的数量总是不同的

在本例中,数组有59个元素。现在,我执行存储过程以将此客户数据插入For循环,该循环执行存储过程59次

我一直在研究如何将数组作为参数传递,但我没有任何运气。我的代码工作得很好,但我只是想知道是否有更好、更有效的方法来完成这项工作,而不是多次执行存储过程

For i = 0 To C.lngArraySize - 1
      Dim cmd As New ADODB.Command
Dim Prm As ADODB.Parameter
  With cmd

    .CommandText = "spAddAccountArray_INS"
    .CommandType = adCmdStoredProc
    .ActiveConnection = CurrentProject.Connection

    Set Prm = .CreateParameter("@pID", adInteger, , , C.ReturnCustomerID)
    .Parameters.Append Prm

    Set Prm = .CreateParameter("@pName", adVarChar, , 50, C.aeName(i))
    .Parameters.Append Prm

    Set Prm = .CreateParameter("@pType", adVarChar, , 30, "Authorized Employee")
    .Parameters.Append Prm

    Set Prm = .CreateParameter("@pacct", adVarChar, , 16, C.aeAccount(i))
    .Parameters.Append Prm

    .Execute
    End With
    Set cmd = Nothing
Next i

最好的性能是将数据打包成xml,然后将其发送到Sql Server(通过存储过程)并在那里分解,然后进行插入

不要按照本文解释的方式创建xml

  sXMLDoc = "<ROOT>"
   sXMLDoc = sXMLDoc & "<Customers CustomerID='VINET' ContactName='Paul Henriot'>"
   sXMLDoc = sXMLDoc & "<Orders CustomerID='VINET' EmployeeID='5' OrderDate='1996-07-04T00:00:00'>"
   sXMLDoc = sXMLDoc & "<Order_0020_Details OrderID='10248' ProductID='11' Quantity='12'/>"
   sXMLDoc = sXMLDoc & "<Order_0020_Details OrderID='10248' ProductID='42' Quantity='10'/>"
   sXMLDoc = sXMLDoc & "</Orders>"
   sXMLDoc = sXMLDoc & "</Customers>"
   sXMLDoc = sXMLDoc & "<Customers CustomerID='LILAS' ContactName='Carlos Gonzlez'>"
   sXMLDoc = sXMLDoc & "<Orders CustomerID='LILAS' EmployeeID='3' OrderDate='1996-08-16T00:00:00'>"
   sXMLDoc = sXMLDoc & "<Order_0020_Details OrderID='10283' ProductID='72' Quantity='3'/>"
   sXMLDoc = sXMLDoc & "</Orders>"
   sXMLDoc = sXMLDoc & "</Customers>"
   sXMLDoc = sXMLDoc & "</ROOT>"
sXMLDoc=“”
sXMLDoc=sXMLDoc&“
sXMLDoc=sXMLDoc&“
sXMLDoc=sXMLDoc&“
sXMLDoc=sXMLDoc&“
sXMLDoc=sXMLDoc&“
sXMLDoc=sXMLDoc&“
sXMLDoc=sXMLDoc&“
sXMLDoc=sXMLDoc&“
sXMLDoc=sXMLDoc&“
sXMLDoc=sXMLDoc&“
sXMLDoc=sXMLDoc&“
sXMLDoc=sXMLDoc&“
这是令人尴尬的,它甚至存在于msdn网站上。使用msxml2.domdocument对象创建xml。不要使用字符串连接来创建xml

几张便条

  • 为什么(2016年)要创建接入前端?维修太可怕了。尝试使用具有适当业务逻辑和数据访问逻辑层的DotNet winforms对象(至少)

  • 自Sql Server 2000以来,OPENXML已更新。见:


  • 我将看一看XML方法。我之所以使用Access,是因为它是一个需要快速开发的应用程序,这也是我的经验。我是SQL Server新手,现在没有能力学习如何构建dotnet winforms应用程序。一旦应用程序内置到Access中,我的下一步就是将其移动到web应用程序中,“快速开发”。您花在维护概念验证应用程序上的时间将超过在基本的3层应用程序上提高速度所需的一点点时间。