2017-04-22 74 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()错误。

相关问题