2017-04-22 26 views
0

我想保存從checkedlistbox檢查項目到我的SQL數據庫,我從同一個SQL數據庫填充我的checkedlistbox,到目前爲止,我能夠從checkedlistbox中獲取選中項目的文本,並將其保存在字符串中然後我用一個標籤來顯示,如果我得到的檢查項目的文本或不工作,但當我嘗試插入檢查數據在數據庫中我得到一個錯誤「連接屬性尚未初始化。」在ExecuteNonQuery()方法上。如何將checkedlistbox中的選中項目插入到SQL數據庫中?

Imports System.Data 
Imports System.Data.SqlClient 
Public Class Form1 
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load 
     Dim da As New SqlDataAdapter 
     Dim dt As New DataTable 
     Dim connectionString As String = "Server=DESKTOP-V12PTAV ;Database=test ;User Id=sa ;Password=wills8877" 
     Using conn As New SqlConnection(connectionString) 
      conn.ConnectionString = connectionString 
      conn.Open() 
      Dim str As String 
      str = "Select sem1 From sem" 
      da = New SqlDataAdapter(str, conn) 
      dt = New DataTable 
      da.Fill(dt) 
      CheckedListBox1.DataSource = dt 
      CheckedListBox1.DisplayMember = "sem1" 
      conn.Close() 
     End Using 
    End Sub 


    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 


     Dim str As String 
     Dim cmd As New SqlCommand 
     Dim sql As String 
     Dim connectionString As String = "Server=DESKTOP-V12PTAV ;Database=test ;User Id=sa ;Password=wills8877" 
     Using conn As New SqlConnection(connectionString) 
      conn.Open() 
      Dim itemChecked As Object 
      For Each itemChecked In CheckedListBox1.CheckedItems 
       str = itemChecked.item("sem1").ToString 
       Label1.Text = str 
       sql = "insert into pretab(pre) values('" + str + "')" 
       cmd.ExecuteNonQuery() 
      Next 
      conn.Close() 

     End Using 

    End Sub 
End Class 

This error

+1

MySQL?你確定? – Strawberry

+0

不是MySQL。請使用正確的標籤。 – Bugs

回答

0

問題從你的查詢語法也許arised。試試這個:

sql = "insert into pretab(pre) values(@str)" 
cmd.Parameters.AddWithValue("@str", str)    
cmd.ExecuteNonQuery() 

OOPS ..我只是意識到,你忘了分配你的命令與連接。因此,請嘗試添加以下聲明:

cmd = New SqlCommand(sql, conn) 

befor執行您的命令。所以最終的代碼應該是這樣的:

sql = "insert into pretab(pre) values(@str)" 

cmd = New SqlCommand(sql, conn) 

cmd.Parameters.AddWithValue("@str", str) 

cmd.ExecuteNonQuery() 
+0

同樣的錯誤先生。 –

+0

我這樣做了: - str = itemChecked.item(「sem1」)。ToString Label1.Text = str sql =「insert into pretab(pre)values(@str)」 cmd.Parameters.AddWithValue(「@ str 「,str) cmd.ExecuteNonQuery() –

+0

對不起,我修改了上面的答案。請參閱它並回來查看您的發現。乾杯 –

0

首先,我會做一個類的數據操作,例如(注意我專注於插入)。您需要將服務器和目錄更改爲您的服務器和SQL-Server上的目錄。

Imports System.Data.SqlClient 
Public Class Operations 
    Private Server As String = "KARENS-PC" 
    Private Catalog As String = "CheckedListBoxDatabase" 
    Private ConnectionString As String = "" 
    Public Sub New() 
     ConnectionString = $"Data Source={Server};Initial Catalog={Catalog};Integrated Security=True" 
    End Sub 
    Public Function Read() As DataTable 
     ' read rows for checked listbox here 
    End Function 
    Public Sub Insert(ByVal sender As List(Of String)) 
     Using cn As SqlConnection = New SqlConnection With {.ConnectionString = ConnectionString} 
      Using cmd As SqlCommand = New SqlCommand With {.Connection = cn, .CommandText = "insert into pretab(pre) values (@pre)"} 
       cmd.Parameters.Add(New SqlParameter With {.ParameterName = "@pre", .SqlDbType = SqlDbType.NVarChar}) 
       cn.Open() 
       For Each item In sender 
        cmd.Parameters("@pre").Value = item 
        cmd.ExecuteNonQuery() 
       Next 
      End Using 
     End Using 
    End Sub 
End Class 

表單代碼

Public Class Form1 
    Private ops As New Operations 
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
     Dim Result = CheckedListBox1.Items.OfType(Of String).Where(Function(item, index) CheckedListBox1.GetItemChecked(index)).ToList 
     ops.Insert(Result) 
    End Sub 

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load 
     CheckedListBox1.DataSource = ops.Read 
     CheckedListBox1.DisplayMember = "sem1" 
    End Sub 
End Class 
0

看來,你沒有提供的命令連接。您的代碼是點擊鏈接

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 

    Dim str As String 
    Dim cmd As New SqlCommand 
    Dim sql As String 
    Dim connectionString As String = "Server=DESKTOP-V12PTAV ;Database=test ;User Id=sa ;Password=wills8877" 
    Using conn As New SqlConnection(connectionString) 
     conn.Open() 
     Dim itemChecked As Object 
     For Each itemChecked In CheckedListBox1.CheckedItems 
      str = itemChecked.item("sem1").ToString 
      Label1.Text = str 
      sql = "insert into pretab(pre) values('" + str + "')" 
      cmd.ExecuteNonQuery() 
     Next 
     conn.Close() 

    End Using 

End Sub 

你需要做的是前cmd.ExecuteNonQuery(),你需要爲它提供一個連接cmd.connection = ConnectionString的

這將刪除cmd.ExecuteNonQuery()錯誤。

相關問題