2017-03-07 3 views
2

おはようございます! VB.NETを使用せずに3年後に私はWeb開発を必要としない私のプロジェクトに再び使うことに決めました。VB.NET - SELECTクエリを使用してテーブルの最初のIDを取得することができません

これは私のコードである(参考:link

cmdOLEDB.CommandText = "SELECT Price FROM tblPrice" 

    cmdOLEDB.Connection = cnnOLEDB 

    Dim rdrOLEDB As OleDbDataReader = cmdOLEDB.ExecuteReader 
    Dim priceList(18) As String 
    Dim i As Integer = 0 

    If rdrOLEDB.Read = True Then 
     While rdrOLEDB.Read() 
      priceList(i) = rdrOLEDB.GetValue(0) 
      i += 1 
     End While 

     txtPrice1.Text = priceList(0).ToString 

     cnnOLEDB.Close() 
    Else 
     MsgBox("Record not found.") 
     cnnOLEDB.Close() 
    End If 

私がメッセージボックスに

MsgBox(rdrOLEDB.GetValue(0)) 

をこのコードを入れたときに結果が "2" であるが、私はその前に1つのより多くのデータを持っています。

txtPrice1.Text = priceList(17).ToString 

結果は35である:それは、クエリはここでID#2ないID番号1.私のAccessデータベース

enter image description here

と、私はこのコードを使用上のスクリーンショットです取得を意味します。

enter image description here

答えて

4

Readメソッドを2回呼び出すため、最初のレコードをスキップしています。
最初の呼び出しは最初のレコードを読み取り、trueを返します。その後、情報を抽出するwhileループを入力しますが、この時点で2番目のレコードにあります。

あなたが行があるかどうかを確認したい場合は、HasRows

If rdrOLEDB.HasRows Then 
    While rdrOLEDB.Read() 
     priceList(i) = rdrOLEDB.GetValue(0) 
     i += 1 
    End While 

    txtPrice1.Text = priceList(0).ToString 

    cnnOLEDB.Close() 
Else 
    MsgBox("Record not found.") 
    cnnOLEDB.Close() 
End If 
+0

説明のためにありがとう。ほんとうにありがとう :) – Mark

1

rdrOLEDB.hasrows

でrdrOLEDB.Readを置き換え、もし条件をご確認ください
If rdrOLEDB.Hasrows= True Then 

もう一度確認してください。

+0

すごい呼んで!どうもありがとう! .Readと.Hasrowsをいつ使用するのか説明できますか? – Mark

+0

最初の行をスキップしているrdrOLEDB.Read()のために、steveの例を参照することができます: – sunilkarkala

関連する問題