如何将选中的项目从checkedlistbox 插入SQL 数据库?
Posted
技术标签:
【中文标题】如何将选中的项目从checkedlistbox 插入SQL 数据库?【英文标题】:how to insert checked items from checkedlistbox to SQL database? 【发布时间】:2017-09-19 04:34:58 【问题描述】:我正在尝试将选中列表框中的选中项目保存到我的 SQL 数据库中,并且我正在从同一个 SQL 数据库中填充我的选中列表框,到目前为止,我能够从选中列表框中获取选中项目的文本并将其保存在字符串然后我使用标签来显示我是否正在获取检查项目的文本及其工作,但是当我尝试将检查的数据插入数据库时,我收到错误“连接属性尚未初始化。”在 ExecuteNonQuery() 方法上。
导入 System.Data 导入 System.Data.SqlClient 公开课形式1 Private Sub Form1_Load(sender As Object, e As EventArgs) 处理 MyBase.Load 暗淡作为新的 SqlDataAdapter 将 dt 调暗为新数据表 Dim connectionString As String = "Server=DESKTOP-V12PTAV ;Database=test ;User Id=sa ;Password=wills8877" 使用 conn 作为新的 SqlConnection(connectionString) conn.ConnectionString = 连接字符串 conn.Open() 暗淡 str 作为字符串 str = "从 sem 中选择 sem1" da = 新 SqlDataAdapter(str, conn) dt = 新数据表 da.填充(dt) CheckedListBox1.DataSource = dt CheckedListBox1.DisplayMember = "sem1" 连接关闭() 结束使用 结束子 Private Sub Button1_Click(sender As Object, e As EventArgs) 处理 Button1.Click 暗淡 str 作为字符串 将 cmd 调暗为新的 SqlCommand 将 sql 调暗为字符串 Dim connectionString As String = "Server=DESKTOP-V12PTAV ;Database=test ;User Id=sa ;Password=wills8877" 使用 conn 作为新的 SqlConnection(connectionString) conn.Open() 暗淡 itemChecked As Object 对于 CheckedListBox1.CheckedItems 中已检查的每个项目 str = itemChecked.item("sem1").ToString 标签1.Text = str sql = "插入 pretab(pre) 值('" + str + "')" cmd.ExecuteNonQuery() 下一个 连接关闭() 结束使用 结束子 结束类
This error
【问题讨论】:
mysql ?你确定吗? 不是 MySQL。请使用正确的标签。 【参考方案1】:问题可能来自您的查询语法。试试这个:
sql = "insert into pretab(pre) values(@str)"
cmd.Parameters.AddWithValue("@str", str)
cmd.ExecuteNonQuery()
哎呀..我刚刚意识到您忘记为您的命令分配连接。所以,请尝试添加以下语句:
cmd = New SqlCommand(sql, conn)
在执行你的命令之前。所以最终的代码应该是这样的:
sql = "insert into pretab(pre) values(@str)"
cmd = New SqlCommand(sql, conn)
cmd.Parameters.AddWithValue("@str", str)
cmd.ExecuteNonQuery()
【讨论】:
我这样做了:- str = itemChecked.item("sem1").ToString Label1.Text = str sql = "insert into pretab(pre) values(@str)" cmd.Parameters.AddWithValue ("@str", str) cmd.ExecuteNonQuery() 对不起,我在上面修改了我的答案。请参考它并返回您的发现。干杯【参考方案2】:首先我会在一个类中进行数据操作,例如(注意我专注于插入)。您需要将服务器和目录更改为 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
【讨论】:
【参考方案3】:您似乎没有提供与该命令的连接。您的代码是按钮单击
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()
错误。
【讨论】:
以上是关于如何将选中的项目从checkedlistbox 插入SQL 数据库?的主要内容,如果未能解决你的问题,请参考以下文章
如何检测是不是将项目添加到 ListBox(或 CheckedListBox)控件
在C#怎么让chackboxlist中一次性输出全部选中的项?
winform checkedlistbox 把选中项的值附给textbox控件,只限止选中(勾选的)其中6项