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 属性尚未初始化的主要内容,如果未能解决你的问题,请参考以下文章