2011-11-01 33 views
0

我在列表框中的一些項目,我將其中的每個人都存儲到我的數據庫,我在做什麼,現在是循環盒子,叫我的數據庫中保存的邏輯,以節省每一個項目。我認爲這效率很低,無論如何,我可以使用批量保存我的物品,這樣我就不會像我的物品一樣多次打開和關閉連接。謝謝。保存多個項目到SQL數據庫

For Each item In outletToBox.Items 
     .CamCode = Items.ToString 
     .CamCampaignAutoID = retID 
     .CamRemarks = uitxtCamRemarks.Text.Trim 


     '---use savetable object to save to database table--- 
Next 

回答

1

我必須做點什麼昨天相似。我的方法是建立一個我必須保存在我的數據庫中的列表,然後將其序列化爲XML。我將XML作爲參數傳遞給存儲過程,然後處理它並保存數據。

總的來說,我會說這是不是調用DATABSE多次爲您的應用程序得到它都想保存的數據,它給你的數據庫在一個事務中更有效的解決方案。

由於你如何能做到這這裏的例子是我的代碼,其循環通過的CheckBoxList,並創建一個選擇項的列表將其序列化爲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() 
0

通常情況下,您不必關閉連接,就可以保持連接處於打開狀態並進行多次插入。您可以在每次插入後進行提交,也可以進行插入組,然後進行提交。你是對的,關閉和開放的連接是昂貴的。 需要更多有關您正在使用的數據庫的信息,以指定是否有方法可以批量執行多個插入。

0

取決於您是否有權訪問更改數據庫過程。如果你可以改變你的SQL過程來知道一個參數中的多個值,那麼你就全部設置了。您可以創建一個分隔的字符串(使用不會在文本,逗號,管道發生的任何字符,等...),或通過XML,然後在SQL PROC解析出的值。 你可以訪問可保存的對象嗎?