如何使用OleDbDataReader对象从SQL SELECT语句获取结果?

时间:2017-09-13 10:43:30

标签: vb.net ado.net

我正在尝试使用以下代码从我的数据库表中检索记录:

 Dim getParentID = "SELECT Parent_ID FROM ParentandGuardian WHERE First_Name = @fname AND Middle_Name = @mname AND Last_Name = @lname"
 comm = New OleDbCommand(getParentID, MyConn)

 comm.Parameters.AddWithValue("@fname", txtPGFirstName.Text)
 comm.Parameters.AddWithValue("@mname", txtPGMiddleName.Text)
 comm.Parameters.AddWithValue("@lname", txtPGLastName.Text)

 Reader = comm.ExecuteReader

 MsgBox(Reader.GetValue(0))

我收到此错误指出MsgBox(Reader.Getvalue(0))声明:

  

未处理的类型' System.InvalidOperationException'发生在System.Data.dll

中      

附加信息:行/列没有数据。

我非常确定查询应该至少有一个结果。我检查了查询指向的特定数据库表,值是否存在。我无法理解为什么我一直收到这个错误。我对VB.NET很陌生。请耐心等待。

1 个答案:

答案 0 :(得分:0)

"行/列没有数据" 表示查询执行中缺少的是使用OleDbDataReader.Read()方法。与While...End While块一起使用的方法如下:

Dim message As String
Using MyConn As OleDbConnection(connectionString)

    MyConn.Open()
    Dim getParentID As String = "SELECT Parent_ID FROM ParentandGuardian WHERE First_Name = @fname AND Middle_Name = @mname AND Last_Name = @lname"
    Using comm As OleDbCommand = New OleDbCommand(getParentID, MyConn)
        comm.Parameters.AddWithValue("@fname", txtPGFirstName.Text)
        comm.Parameters.AddWithValue("@mname", txtPGMiddleName.Text)
        comm.Parameters.AddWithValue("@lname", txtPGLastName.Text)

        Using reader As OleDbDataReader = comm.ExecuteReader()

           While reader.Read()
               message = reader.GetValue(0).ToString()
           End While

           MsgBox(message)
        End Using
    End Using

    MyConn.Close()
End Using

Read方法用于在从各行检索数据之前将数据读取器推进到第一条记录(或多条记录的下一条记录)。

注意:OleDbCommand.Parameters.AddOleDbCommand.Parameters.AddWithValue更受欢迎,因为它可以声明自定义数据类型以匹配数据库中使用的每个列数据类型(具体取决于您的数据库)使用)。

类似问题:

Error: No data exists for the row/column

Why do I get "No data exists for the row/column" error when I do have data?