2017-05-14 39 views
1

我填充公司名稱的CheckBoxList的(這工作正常)附加檢查項CheckedListBox到difrent在SQL vb.net領域

'Fill CheckBoxList' 
Try 
    con.Open() 

    cmd.Connection = con 
    cmd.CommandText = "SELECT CName FROM Company ORDER BY CName ASC" 
    dr = cmd.ExecuteReader() 
    Do While dr.Read = True 
     CheckedListBox1.Items.Add(dr.GetString(0)) 
    Loop 
Catch ex As Exception 
    MsgBox(ex.Message) 
Finally 
    con.Close() 
    cmd.Dispose() 
End Try 

現在我需要檢查的名稱插入到包含每一個表在它自己的領域

這裏我堅持公司名稱...

當我點擊按鈕顯示的記錄,我想的CheckBoxList選擇那些字段中的公司名稱(中CheckBoxList的有Company1到Company10,如果我選擇Company2,Company4,Company8和Compan Y10 - 當我扯這些公司將被檢查的記錄)

也許每個公司一個獨立的領域是沒有必要的,我開的想法...

感謝

*編輯*

我發現那位這個地方,但它插入CheckedItems在不同的行

Dim db As String = Datasource & filename & line & param 
    Dim da As New SQLiteDataAdapter 
    Dim dt As New DataTable 
    Using con As New SQLiteConnection(db) 
     con.Open() 
     Dim checkedItem As Object 
     For Each checkedItem In CheckedListBox1.CheckedItems 
      cmd = con.CreateCommand 
      cmd.CommandText = "INSERT INTO Mall (Company) VALUES ('" & checkedItem & "')" 
      cmd.ExecuteNonQuery() 
     Next 
     con.Close() 
    End Using 

可以T他被修改做我需要的東西?

+0

如果你有號碼您的領域,它是一個不好的/錯誤的DB模式的跡象工作。 – Plutonix

+0

@Plutonix請詳細說明 – user7406533

+0

想想SQL如何找到一家公司:(使用當然參數)。 '... WHERE Company1 = @c OR Company2 = @c OR Company3 = @c OR ...'更糟的是代碼試圖用DataTable進行操作。您的數據庫設計缺少關係/規則* foo可能是一個或多個公司* – Plutonix

回答

0

以下加載的部門名稱和id從SQL-Server數據庫表格中加載到CheckedListBox上。點擊按鈕會檢查部門名稱,並將它們傳遞給插入另一個表格或您想要執行的操作的過程。

DisplayMember取自Department類中的ToString。

類來處理加載和數據

Imports System.Data.SqlClient 
Public Class Operations 
    ''' <summary> 
    ''' Replace with your SQL Server name 
    ''' </summary> 
    Private Server As String = "KARENS-PC" 
    ''' <summary> 
    ''' Targeted database 
    ''' </summary> 
    Private Catalog As String = "ForumExamples" 
    ''' <summary> 
    ''' Connection string for connecting to the database 
    ''' </summary> 
    Private ConnectionString As String = "" 
    ''' <summary> 
    ''' Setup the connection string 
    ''' </summary> 
    Public Sub New() 
     ConnectionString = $"Data Source={Server};Initial Catalog={Catalog};" & 
      "Integrated Security=True" 
    End Sub 
    Public Function GetDepartments() As List(Of Department) 
     Dim departments As New List(Of Department) 

     Using cn As SqlConnection = New SqlConnection With {.ConnectionString = ConnectionString} 
      Using cmd As SqlCommand = New SqlCommand With {.Connection = cn} 
       cmd.CommandText = "SELECT id,Name FROM Departments" 

       cn.Open() 
       Dim reader As SqlDataReader = cmd.ExecuteReader 
       While reader.Read 
        departments.Add(New Department With 
            { 
             .Id = reader.GetInt32(0), 
             .Name = reader.GetString(1) 
            }) 
       End While 

      End Using 
     End Using 
     Return departments 
    End Function 
    Public Sub InsertDepartments(sender As List(Of Department)) 
     Using cn As SqlConnection = New SqlConnection With 
      { 
       .ConnectionString = ConnectionString 
      } 
      Using cmd As SqlCommand = New SqlCommand With 
       { 
        .Connection = cn, .CommandText = "Your SQL INSERT statement" 
       } 
       cmd.Parameters.Add(New SqlParameter With 
            { 
            .ParameterName = "@Name", .DbType = DbType.String 
            }) 
       cn.Open() 
       For Each dept As Department In sender 
        cmd.Parameters("@Name").Value = dept.Name 
        cmd.ExecuteNonQuery() 
        Console.WriteLine(dept.Name) 
       Next 
      End Using 
     End Using 
    End Sub 
End Class 
Public Class Department 
    Property Id As Integer 
    Property Name As String 
    Public Overrides Function ToString() As String 
     Return Name 
    End Function 
End Class 

表單代碼

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
    If CheckedListBox1.CheckedItems.Count > 0 Then 
     Dim departments As New List(Of Department) 
     CheckedListBox1.CheckedItems.Cast(Of Department).ToList.ForEach(
      Sub(d) 
       departments.Add(d) 
      End Sub) 
     ops.InsertDepartments(departments) 
    Else 
     MessageBox.Show("No departments selected") 
    End If 
End Sub 
+0

我沒有服務器,我正在使用SQLite.net。我該如何改變它? – user7406533

+0

這就是爲什麼最好先指出所用的數據庫。所以,我使用SQLLite.net也有的連接和命令對象,您需要將我的示例中的SqlClient切換到SQLLite,例如而不是SqlConenction使用SQLiteConnection等。 –