2
    Dim con As New OleDb.OleDbConnection
    Dim dbProvider As String
    Dim dbSource As String
    Dim ds As New DataSet
    Dim da As New OleDb.OleDbDataAdapter
    Dim sql As String
    dbProvider = "Provider=Microsoft.Jet.OLEDB.4.0;"
    dbSource = "Data Source = C:\Users\Blessing\Documents\Ishvatest.mdb"
    con.Connectionstring = dbProvider & dbSource
    con.Open()
    sql = "SELECT * From Employees"
    da = New OleDb.OleDBDataAdapter(sql, con)
    da.Fill(ds, "Ishvatest")
    MsgBox("Ishvatest is now open")
    con.Close()
    MsgBox("Ishvatest is now closed")
    txtID.Text = ds.Tables("Employees").Rows(0).Item(1)
    txtID.Name = ds.Tables("Employees").Rows(0).Item(2)

如果我使用此代码运行程序,则会收到错误“未处理空引用异常”

我的代码有什么问题?

4

3 回答 3

1

好吧,假设表不是空的,那么问题可能就在这里

da.Fill(ds, "Ishvatest")

在这里,您归档一个数据集并将其第一个表命名为“Ishvatest”,然后您尝试从名为“Employees”的表中读取。没有同名的表

更改为(或 da.Fill(ds, "Employees"))

txtID.Text = ds.Tables("Ishvatest").Rows(0).Item(1)
txtID.Name = ds.Tables("Ishvatest").Rows(0).Item(2)

另一种解决方案可能是使用索引来引用数据表而不是名称,并且(作为额外的预防措施)还检查是否有任何记录要读取

If ds.Tables.Count > 0 AndAlso ds.Tables(0).Rows.Count > 0 Then
    txtID.Text = ds.Tables(0).Rows(0).Item(1)
    txtID.Name = ds.Tables(0).Rows(0).Item(2)
End If
于 2013-08-19T10:51:36.057 回答
0

您正在使用

 da.Fill(ds, "Ishvatest")

并试图将您的数据绑定到“员工”!!!

   txtID.Text = ds.Tables("Employees").Rows(0).Item(1)
    txtID.Name = ds.Tables("Employees").Rows(0).Item(2)

应该是

txtID.Text = ds.Tables("Ishvatest").Rows(0).Item(1)
txtID.Name = ds.Tables("Ishvatest").Rows(0).Item(2)

或者您应该按如下方式填充数据集:

da.Fill(ds, "Employees")

并使用

   txtID.Text = ds.Tables("Employees").Rows(0).Item(1)
   txtID.Name = ds.Tables("Employees").Rows(0).Item(2)
于 2013-08-19T11:25:54.627 回答
0

这个错误总是一样的。什么都不是。第一个是你在使用它之前没有分配任何东西con,因此它是null; 如果您超过了这一点,其他人很可能会发生。

底线是您需要在使用实例之前为实例分配一些东西(当引用类型时)。所以,con需要一个New OleDbConnection(). 或者,您需要在使用它之前确保它是某个东西(例如,如果返回某些东西,例如 with ds.Tables("Employees").Rows(0): 是否有一行?)

于 2013-08-19T10:44:12.313 回答