我的列表框中有一些项目,我将其中的每个项目存储到我的数据库中,我现在正在做的是循环框并调用我的数据库保存逻辑来保存每个项目。我认为这是非常低效的,无论如何我可以用来批量保存我的项目,这样我就不会像我的项目一样多次打开和关闭连接。感谢。
For Each item In outletToBox.Items
.CamCode = Items.ToString
.CamCampaignAutoID = retID
.CamRemarks = uitxtCamRemarks.Text.Trim
'---use savetable object to save to database table---
Next
答案 0 :(得分:1)
昨天我必须做类似的事情。我的方法是建立一个列表,列出我必须保存在我的数据库中的任何内容,然后将其序列化为XML。我将XML作为参数传递给存储过程,然后对其进行处理并保存数据。
总的来说,我认为这是一个比多次调用数据库更有效的解决方案,因为您的应用程序获取了它想要保存的数据,并在一次交易中将其提供给您的数据库。
作为如何在此处执行此操作的示例,我的代码循环通过CheckBoxList并创建所选项的List,然后将其序列化为XML。您应该可以轻松地对其进行调整以使用ListBox
' This is the list that will hold each of our selected items
Dim listOfSelectedItems As New List(Of ListItem)
' Loop through the CheckBoxList control and add all selected items to
' the listOfSelectedItems List if the item has its Selected property
' set to true
For Each item As ListItem In chkNotify.Items
If (item.Selected = True) Then
listOfSelectedItems.Add(item)
End If
Next
' Declare a new XMLSerializer
Dim serializer As New XmlSerializer(listOfSelectedItems.GetType)
' Declare a StringWriter
Dim writer As StringWriter = New StringWriter()
' Serialize the listOfSelectedItems List
serializer.Serialize(writer, listOfSelectedItems)
' Store our XML in a String variable
Dim serializedXML As String = writer.ToString()
答案 1 :(得分:0)
通常,您不必关闭连接,保持连接打开并执行多次插入。您可以在每次插入后提交,也可以执行插入组,然后只提交。你是对的,关闭和打开连接是昂贵的。 有关用于指定是否存在批量执行多个插入的方法的DB的更多信息。
答案 2 :(得分:0)
取决于您是否有权更改数据库过程。如果您可以更改您的sql过程以了解一个参数中的多个值,那么您已经设置好了。您可以创建一个分隔的字符串(使用文本中不会出现的任何字符,逗号,管道等等)或传递xml,然后解析sql proc中的值。 你能访问可保存的对象吗?