system.invalidoperationexception:填充:selectCommand.Connection 属性尚未初始化

Posted

技术标签:

【中文标题】system.invalidoperationexception:填充:selectCommand.Connection 属性尚未初始化【英文标题】:system.invalidoperationexception: Fill: selectCommand.Connection property has not been initialized 【发布时间】:2014-03-06 12:41:11 【问题描述】:

我正在使用 Visual basic 连接 MS Access 数据库。不幸的是,我无法将数据库中的记录链接到 Visual Basic。

我的数据库位于 C:\Users\lenovo\Desktop\GUI references\WindowsApplication1\WindowsApplication1\bin\Debug

数据库名称是 smsenabler.mdb

要连接的表是ProfessorListTable

该表包含以下字段

ID |姓氏 |名字 |米|部门 |工作年份

我的表单上的代码如下所示:

    Imports System.Data.OleDb

Public Class ProfessorList
    Dim con As OleDbConnection

    Private Sub Label1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label1.Click

    End Sub

    Private Sub ProfessorList_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Try
            Dim con As OleDbConnection = New OleDbConnection
            con.ConnectionString = "Provider = Microsoft.Jet.OLEDB.4.0; Data Source = ..\smsenabler.mdb"
            con.Open()

            showRecords()
            con.Close()
        Catch ex As Exception
            MessageBox.Show(ex.ToString)
        End Try
    End Sub
    Public Sub showRecords()
        Dim dt As New DataTable
        Dim ds As New DataSet
        ds.Tables.Add(dt)

        Dim da As New OleDbDataAdapter("Select * from ProfessorListTable", con)
        da.Fill(dt)

        Dim myRow As DataRow

        For Each myRow In dt.Rows
            ListView1.Items.Add(myRow.Item(0))
            ListView1.Items(ListView1.Items.Count - 1).SubItems.Add(myRow.Item(1))
            ListView1.Items(ListView1.Items.Count - 1).SubItems.Add(myRow.Item(2))
            ListView1.Items(ListView1.Items.Count - 1).SubItems.Add(myRow.Item(3))
            ListView1.Items(ListView1.Items.Count - 1).SubItems.Add(myRow.Item(4))
            ListView1.Items(ListView1.Items.Count - 1).SubItems.Add(myRow.Item(5))
        Next

    End Sub

错误信息

。在 System.Data.Common.DbDataAdapter.GetConnection3(DbDataAdapter adapter,IDbCommand command String method) at System.Data.Common.DbDataAdapter.FillInternal(DataSet dataset, DataTable[] datatables, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior 行为)在 System.Data.Common.DbDataAdapter.Fill(DataTable dataTable) 在 THESIS_GUI.ProfessorList 的 System.Data.Common.DbDataAdapter.Fill(DataTable[] dataTables,Int32 startRecord, Int32 maxRecords, IDbCommand command, CommandBehavior 行为)。 C:\Users\lenovo\Desktop\GUI references\WindowsApplication1\WindowsApplication1\ProfessorList.vb:line17 中的 ProfessorList_Load(Object sender, EventArgs e)

第 17 行

showRecords()

它给了我一个根本没有记录的输出。它只显示一个带有一个字段的 GUI。谢谢你..

【问题讨论】:

【参考方案1】:

一个建议是确保您的连接(“con”)可用于所有子例程。我以前使用过全局变量来防止打开和关闭连接的需要(这在过去会导致问题)。我们都采用类似的方法,但这里有一些我已经剥离的代码(删除了错误陷阱、调试辅助等):

Global cnLocalData  As ADODB.Connection
Public Sub Get_Connection()
    Set cnLocalData = New ADODB.Connection
    With cnLocalData
        .Provider = "Microsoft.Jet.OLEDB.4.0"
        .Properties("Data Source") = "C:\data\SomeDB.mdb"
        .Open
    End With
End Sub

【讨论】:

【参考方案2】:

您已断开与服务器的连接,您必须在showRecords 方法中打开您的连接。

当您想在关闭连接的情况下执行命令时会出现此错误错误。

【讨论】:

虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接答案可能会失效。 - From Review

以上是关于system.invalidoperationexception:填充:selectCommand.Connection 属性尚未初始化的主要内容,如果未能解决你的问题,请参考以下文章

视图中出现 InvalidOperationException.Collection 被修改错误