使用arraylist将项目插入DB

时间:2011-05-23 10:03:44

标签: asp.net vb.net arraylist

我在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

执行此操作

非常感谢所有帮助!

6 个答案:

答案 0 :(得分:2)

而不是传递单个Order项,传递一个Order of 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()

答案 1 :(得分:1)

将项目数组转换为xml字符串,您可以使用openxml在存储过程中执行批量插入。 http://msdn.microsoft.com/en-us/library/ms191268.aspx还引用sql server 2005 http://weblogs.asp.net/jgalloway/archive/2007/02/16/passing-lists-to-sql-server-2005-with-xml-parameters.aspx

的旧帖子

答案 2 :(得分:1)

**编辑以说明额外信息**

您可以调整代码隐藏中现有的“for each”逻辑,以构建一个arraylist或List<>产品 - 此数组/列表应该是Order对象的属性。通过BAL将Order对象传递给DAL。

然后遍历DAL代码(InsertOrder)中的Order对象中的产品

  • 在a中单独插入每一行 循环
  • 或动态构建Order的insert语句

您应该将其包装在一个事务中,以确保如果一行无法插入,则可以完全回滚订单。

对于大量产品的订单,我会选择@ Aravind的答案。

答案 3 :(得分:1)

我使用SqlClient.SqlBulkCopy。这实际上是批量插入的.Net版本,要使用它,您需要将要插入的对象插入DataTable或创建一个类来读取实现IDDataReader的数据。如果您插入1,000行,那么您应该看到显着的性能增加和更整洁的代码。

http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlbulkcopy.aspx

答案 4 :(得分:0)

答案 5 :(得分:0)

我建议你使用逗号分隔值。不要在DAL层中发送数组列表,而是函数应该从表示层返回格式化的逗号分隔值,并将此值发送到DAL,最后分离存储过程中的值。

替代 您可以在XML中格式化值并将其发送到存储过程。

为了执行它,您的参数应该是varchar类型。