使用arraylist将项目插入DB

问题描述

| 我在
Order.aspx.vb
中创建了一个包含项的ArrayList。我将它们传递给我的
bllOrder
,然后将其传递给我的
dalOrder
。     Order.aspx.vb
Dim item As RepeaterItem
For Each item In rptProductList.Items
   objOrder.OrderCustID = Session(\"CustID\")
   objOrder.OrderProdID = DirectCast(item.FindControl(\"ddlProducts\"),DropDownList).SelectedValue
   bllOrder.InsertOrder(objOrder)
Next item
    dalOrder
Function InsertOrder(ByVal objOrder As Order) As Boolean
    Dim Result as New Boolean

    myconn.open()

    Dim sql As String = \"INSERT INTO order(OrderCustID,OrderProdID) VALUES (?,?)\"
    Dim cmd As New OdbcCommand(sql,myconn)

    cmd.Parameters.AddWithValue(\"OrderCustID\",objOrder.OrderCustID)
    cmd.Parameters.AddWithValue(\"OrderProdID\",objorder.OrderProdID)

    result = cmd.ExecuteNonQuery()

    myconn.close()

    Return Result
End Function
这对一件商品来说是件好事,但是我要如何为我的
ArrayList
做呢? 非常感谢所有帮助!     

解决方法

而不是传递单个Order项,而是传递一个Orders列表,它们通过您的方法在其中循环。使其类似于
Public Function InsertOrder(objOrder As List(Of Order)) As Boolean
,然后将objOrder用作Orders的列表以使其循环通过。 将以下代码放入后面的代码的foreach循环中,并传递当前的项目值;
cmd.Parameters.AddWithValue(\"OrderCustID\",objOrder.OrderCustID)
    cmd.Parameters.AddWithValue(\"OrderProdID\",objorder.OrderProdID)

    result = cmd.ExecuteNonQuery()
    ,将项目数组转换为xml字符串,然后可以使用openxml在存储过程中进行批量插入。 http://msdn.microsoft.com/zh-cn/library/ms191268.aspx还引用了sql server 2005的旧帖子http://weblogs.asp.net/jgalloway/archive/2007/02/16/passing-列出到sql-server-2005-with-xml-parameters.aspx     ,**编辑以提供更多信息** 您可以改编代码中现有的“针对每个”逻辑,以构建产品的数组列表或List <>-此数组/列表应为Order对象的属性。目前,通过您的BAL将Order对象传递给DAL。 然后遍历DAL代码(InsertOrder)中Order对象中的产品,或者 将每一行分别插入到 环 或动态为订单构建一个插入语句 。 您应该将其包装在一个事务中,以确保在没有插入一行的情况下竞争地回滚该订单。 对于大量产品的订单,我会寻求@Aravind的回答。     ,我将使用SqlClient.SqlBulkCopy。这实际上是批量插入的.Net版本,要使用它,您需要将要插入的对象放入DataTable中,或创建一个类来读取实现IDDataReader的数据。如果您插入1,000行,那么您应该会看到性能显着提高并且代码更加整洁。 http://msdn.microsoft.com/zh-CN/library/system.data.sqlclient.sqlbulkcopy.aspx     ,请通过以下链接 如何在SQL Server中插入C#日期时间var     ,我建议您使用逗号分隔的值。不要在DAL层中发送数组列表,相反,函数应从表示层返回格式化的逗号分隔值,然后将此值发送给DAL,最后在存储过程中分隔这些值。 另类 您可以使用XML格式化值并将其发送到存储过程。 为了执行此操作,您的参数应为varchar类型。     

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...