2017-03-05 48 views
0

我需要將數據從checkedlistbox插入到Access數據庫。 checkedlistboxes中的項目是外鍵,並且通過它們的名稱而不是它們的ID來顯示。我需要做的是當我點擊「添加」按鈕時,它應該將項目的ID和它們的名稱作爲字符串(str)插入到數據庫中的Services_Availed表中,但即使插入了新數據,名稱也不會顯示(每當我點擊添加按鈕時添加另一個ServicesAvailed_ID)。如何將數據從CheckedListBox插入數據庫

這裏是我的嘗試:

Private Sub btnAddService_Click(sender As Object, e As EventArgs) Handles btnAddService.Click 
Try 
    Dim con As New OleDb.OleDbConnection 
    Dim str As String = "" 
    Dim i As Integer 
    If chcklstbx1.CheckedItems.Count > 0 Then 
     For i = 0 To i < chcklstbx1.CheckedItems.Count 
      If str = "" Then 
       str = chcklstbx1.CheckedItems(i).ToString 
      Else 
       str += "," + chcklstbx1.CheckedItems(i).ToString 
      End If 
     Next 
     con.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\rose&mike\Desktop\DbSysDel3\salondbaccess.accdb" 
     con.Open() 
     Dim cmd As New OleDb.OleDbCommand 
     cmd = New OleDbCommand("Insert Into Services_Availed(AvailedNames) Values(@ServiceType_Name)", con) 
     cmd.Parameters.AddWithValue("@ServiceType_Name", str) 
     cmd.ExecuteNonQuery() 
     MessageBox.Show("Data inserted successfully") 
     con.Close() 
    Else 
     MessageBox.Show("Please select at least one item") 
     While (chcklstbx1.CheckedItems.Count > 0) 
      chcklstbx1.SetItemChecked(chcklstbx1.CheckedIndices(0), False) 
     End While 
    End If 
Catch ex As Exception 

End Try 
End Sub 

任何建議將高度讚賞。

+0

是您有意添加新行對於每個被選中,還是僅僅指剛添加一行對所有項目?您的代碼只會添加一行。有關如何引用名稱和ID的信息,請參閱:https://msdn.microsoft.com/en-us/library/system.windows.forms.checkedlistbox.checkeditems(v=vs.110).aspx –

+0

@WayneG .Dunn是我想添加一行,但是對於每個被檢查的項目,它應該轉換爲'String',用逗號分隔,並保存到* AvailedNames *表中。代碼確實可行,但似乎存在與我用作參考的值有關的問題。 checkedlistbox中的項目來自名爲* Service_Types *的表。請指出我錯在哪裏。 – luca

+0

在你爲'點擊'事件編碼時,你檢查是否有任何項目被選中(你的第一個'IF'語句),然後你循環所有的選中,但你的代碼插入一個新的記錄是外面的循環,因此它只會被執行一次。你應該在你的'IF'之後移動你的'con.conn ..','con.open',然後將'Next'移動到'con.close'之前。你看過關於如何引用項目的文章嗎? –

回答

0

可以減少你的陳述到:

For i = 0 to chcklstbx1.CheckedItems.Count - 1