由于InvalidOperationException,无法从MySQL读取行

由于InvalidOperationException,无法从MySQL读取行,mysql,vb.net,Mysql,Vb.net,基本上这是我的代码,VisualStudio给了我以下错误消息:“System.InvalidOperationException”类型的未处理异常“发生在系统数据中”,它指向行.Fill(表)。 详细信息:“Fill:SelectCommand.Connection属性尚未初始化” 编辑:ListViewSale是我希望粘贴MySQL数据的ListViewBox 如果有人能给我一些关于错误的信息,我将非常感激。mysql登录信息在代码前面用以下代码处理: Dim connection As

基本上这是我的代码,VisualStudio给了我以下错误消息:“System.InvalidOperationException”类型的未处理异常“发生在系统数据中”,它指向行.Fill(表)。 详细信息:“Fill:SelectCommand.Connection属性尚未初始化”

编辑:ListViewSale是我希望粘贴MySQL数据的ListViewBox

如果有人能给我一些关于错误的信息,我将非常感激。mysql登录信息在代码前面用以下代码处理:

  Dim connection As New MySqlConnection(INFORMATION HERE)       

  Public Sub updateList()
        Dim sqlQuery As String = "SELECT * FROM Produkt"
        Dim sqlAdapter As New MySqlDataAdapter
        Dim sqlCommand As New MySqlCommand
        Dim Table As New DataTable
        Dim i As Integer

    With sqlCommand
        .CommandText = sqlQuery
        .Connection = connection
    End With

    With sqlAdapter
        .SelectCommand = sqlCommand
        .Fill(Table)
    End With

    For i = 0 To Table.Rows.Count - 1
        With ListViewSale
            .Items.Add(Table.Rows(i)("id"))
            With .Items(.Items.Count - 1).SubItems
                .Add(Table.Rows(i)("Name"))
                .Add(Table.Rows(i)("Price"))
                .Add(Table.Rows(i)("Quantity"))
                .Add(Table.Rows(i)("Description"))
            End With
        End With
    Next
End Sub

有几种方法可以更经济地满足您的需求:

专用dtProduct作为数据表
公共子更新列表()
Dim sqlQuery As String=“选择a、b、c、q、e。。。来自Produkt“
使用dbcon作为新的MySqlConnection(mySQLConnStr)
使用cmd作为新的MySqlCommand(sqlQuery,dbcon)
dtProduct=新数据表()
dbcon.Open()
dtProduct.Load(cmd.ExecuteReader)
终端使用
终端使用
...
  • 不要使用全局连接对象。创建、使用并处置它
    • 但是,您可以使用全局连接字符串,这样就不会在代码中到处乱丢
  • 使用
    使用
    块来关闭和处理具有
    .dispose
    方法的东西。这允许他们释放分配的资源
  • 这不是将SQL和连接设置为命令对象的属性,而是将它们作为构造函数参数传递。这只是个人偏好,但一旦养成习惯,它会使代码更加简洁,并且不太可能忘记这些关键项
  • 如果在SQL中指定列,则可以控制它们的显示顺序
  • 不需要使用
    DataAdapter
    来填充表格。上面的代码使用
    DataReader
    来完成此操作
  • 如果您确实使用了
    DataAdpater
    ,请将其设置为全局并完全配置。这将防止您再次运行该代码。
    daProduct.Fill(dtProduct)
    will(can)刷新内容,只获取任何新的或更改的数据

    最后,
    ListView
    非常不适合db操作。首先,所有内容都存储为字符串。这意味着价格和数量等数字必须转换回使用(或更新)。其次,使用
    DataGridView
    ,填充LV的所有代码都可以替换为:

    dgvProd.DataSource=dtProduct
    

    DGV将创建和列,并添加所有行,而无需循环或创建每一行。数据保留在
    数据表中并键入。

    是否阅读错误消息?单击
    查看详细信息
    以…获取更多详细信息已检查数据库中是否存在信息。阅读异常-让我们看看它…您需要有连接。在执行命令之前打开。在您的情况下,在SqlAdapter.Fill之前谢谢您的回答!但是,我在这一行上得到了相同的错误:“dtProduct.Load(cmd.ExecuteReader)”-ErrorMessage:“对象引用未设置为对象的实例“谢谢!我是否仍会对每个循环使用相同的方法将其打印到ListViewBox?我还将尝试使用DataGridView来查看是否可以让它工作:)这一行将构建并填充它。它们非常容易与基本的行为/外观一起使用,但是有很多属性和事件,所以你可以做任何你想做的事情。ListView将所有内容存储为字符串,并且没有绑定-这对db来说太可怕了