2017-09-13 3 views
0

私はこのコードで私のデータベーステーブルからレコードを取得しようとしています: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で発生しました

追加情報:行/列のデータが存在しません。

質問には少なくとも1つの結果が必要です。私は、クエリが指している特定のデータベーステーブルをチェックして、そこに値があります。私はなぜこのエラーが出てくるのか理解できません。私はVB.NETの新機能です。私と一緒に抱きしめてください。

+1

まず:.AddWithValueを使用しないでください。 2番目:フィールドにアクセスする前に、Reader.Read()を実行する必要があります – muffi

+0

@muffiありがとうございました!私はついにそれを得ました!それは私にとって大きな助けになる。私はもう一つ質問があります。なぜ、あなたはAddDWithValueを使わないと言ったのですか?これは、将来のVB.NETとの闘いに役立ちます。 TIA。 –

+0

.AddWithValueは間違ったフィールドタイプを推測することがあるためです。常に.Add( "@ param"、MySqlDbType.Int32).Value = 0'のようなパラメータを追加する方が良い – muffi

答えて

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方法。

NB: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?

関連する問題