如何从使用OleDbDataReader对象的SQL SELECT语句中获取结果?
问题描述:
我想从我的数据库表中获得一个记录与此代码:如何从使用OleDbDataReader对象的SQL SELECT语句中获取结果?
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))
声明:
类型的未处理的异常“系统。 InvalidOperationException'发生在System.Data.dll中
附加信息:行/列不存在任何数据。
我很确定查询应该至少有一个结果。我检查了查询指向的特定数据库表,并且值在那里。我只是不知道为什么我不断收到这个错误。我对VB.NET来说很新。请多多包涵。
答
“没有数据存在行/列”指示您从查询执行中缺少的是使用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.Add
比OleDbCommand.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?
第一:不要使用.AddWithValue。第二:在你可以访问字段之前,你将不得不做一个Reader.Read() – muffi
@ muffi谢谢你,先生!我终于明白了!这对我很有帮助。我还有一个问题。你为什么说,不要使用.AddWithValue?这可能会帮助我与VB.NET的未来挣扎。 TIA。 –
因为.AddWithValue有时会猜测错误的字段类型。最好添加一个参数,如'.Add(“@param”,MySqlDbType.Int32).Value = 0' – muffi