当前位置: 首页 > 知识库问答 >
问题:

如何将选中项从checkedlistbox插入SQL数据库?

解晟
2023-03-14

我试图将选中的项目从checkedlistbox保存到我的SQL数据库,并从同一个SQL数据库填充我的checkedlistbox,到目前为止,我能够从checkedlistbox中获取选中项的文本,并将其保存为字符串,然后使用标签显示是否获取选中项的文本及其工作情况,但当我尝试在数据库中插入选中的数据时,我收到一个错误“连接属性尚未初始化”关于ExecuteNonQuery()方法。

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

这个错误

共有3个答案

邢飞白
2023-03-14

您似乎没有提供与该命令的连接。你的代码是点击按钮

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。连接=连接字符串

这将删除cmd. ExecteNonQuery()错误。

明正德
2023-03-14

首先,我会在一个类中进行数据操作,例如(注意,我关注的是插入)。您需要将服务器和目录更改为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
蒋权
2023-03-14

问题可能是由查询语法引起的。试试这个:

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

OOPS...我刚刚意识到您忘记为您的命令分配连接。因此,请尝试添加以下语句:

cmd = New SqlCommand(sql, conn)

在执行命令之前。最后的代码应该是这样的:

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

cmd = New SqlCommand(sql, conn)

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

cmd.ExecuteNonQuery()
 类似资料:
  • 使用和的旧方法适用于遗留的类型。我想避免使用这些麻烦的旧日期时间类。 通过JDBC驱动程序发送java.time类型的现代方式是什么?

  • 我有2列的jtable,然后我想把它的值插入数据库; 我知道这可以用像.. 问题是..getRowCount不知道该行是否为空,那么在数据库中,该空值仍将被插入(它将在数据库中生成我的自动增量值) 我的问题是如何从jtable中插入数据库,但是空行不会插入? 如果我要求太多,请给我一个处理空行的线索, 原谅我的英语 下面是向数据库中添加数据的坏方法

  • 我有两个SQL表 表 1: 列1, 列2, 列3, 列4, 列5, 列6, 列7 表 2: 列1, 列2, 列4, 列5, 列10 (新列) 应该被赋予默认值0 我需要将数据从表1复制到表2

  • 我在数据库上使用Scala笔记本。我需要执行一个INSERT的数据从一个数据帧到一个表SQL服务器。如果数据已经存在,则不需要修改或插入只插入不存在的数据。 我尝试了这里指定的方法https://docs.databricks.com/spark/latest/data-sources/sql-databases.html#write-然而,它们并没有解决我的用例。保存模式。Append创建重复的

  • 问题内容: 我想在我的MySQL数据库中插入整数188和90,但以下代码不起作用: 为什么不起作用? 问题答案: 编辑 为我工作: 在MySQL表;

  • 我想在Jaspersoft Studio中的报表中的详细信息带中插入来自数据库的图像。 JPG图像保存在MySQL中的longblob类型的imgdata字段中。 我试图将此表达式放在Image元素中: 在第一种情况下,我得到以下错误: ...在第二种情况下,这个错误是: 我的问题是:如何将数据库中的图像插入到JasperReports的报表中?