ADO.NET Accessのホームへ戻る

OleDbDataReaderからインデックス番号を指定して値を取得するサンプル

OleDb DataReaderからインデックス番号を指定して値を取得するサンプル

 

このサンプルは、AccessNwind.mdbデータベースの得意先テーブルからレコードを抽出して表示します。OleDbDataReaderからはフィールド(カラム)のインデックス番号を指定して値を取得します。

 

このサンプルでは、以下のノウハウを習得することができます。

 

  SQLSelect Topオプションの使い方

  OleDbDataReaderRead()メソッドの使い方

  OleDbDataReaderからフィールドのインデックス番号を指定して値を取得する方法

 

サンプルのPage_Load()イベントでは、AccessNwind.mdbデータベースから得意先テーブルのレコードを抽出して表示します。行7では、得意先テーブルからレコードを抽出するSQLを生成しています。SelectステートメントのTop 5は、得意先テーブルの先頭から5件のレコードを抽出することを意味します。行8-10では、OleDbConnectionOleDbCommandのインスタンスを生成しています。

 

13では、OleDbConnectionOpen()メソッドでAccessNwind.mdbデータベースを開いています。行14では、OleDbCommandExecuteReader()メソッドで得意先テーブルのOleDbDataReaderを生成しています。行15-17では、OleDbDataReaderGetOrdinal()メソッドでフィールド(カラム)のインデックス番号(Ordinal Number)を取得して変数に保存しています。GetOrdinal()メソッドの引数には、フィールド名を指定します。

 

18-25While…End Whileでは、OleDbDataReaderRead()メソッドでEOFになるまで得意先テーブルのレコードを読み込んでいます。行19-23With…End Withでは、LabelTextプロパティに得意先テーブルの得意先名、担当者名、電話番号を設定して表示しています。OleDbDataReaderからフィールド値を取得するとき、フィールド名を指定する代わりにフィールドのインデックス番号を指定しています。OleDbDataReaderからフィールド値を取得するには、フィールド名を指定するよりもフィールドのインデックス番号を指定した方が高速です。

 

26では、OleDbDataReaderClose()メソッドで得意先テーブルを閉じています。行27では、OleDbConnectionClose()メソッドでAccessNwind.mdbデータベースを閉じています。

 

  6: Sub Page_Load()
  7:   Dim strSqlSelect As String = "Select top 5 * From Customers;"
  8:   Dim con As New OleDbConnection( _
  9:     ConfigurationSettings.AppSettings("conStringAccNw"))
 10:   Dim cmd As New OleDbCommand(strSqlSelect, con)
 11:   Dim intRecordCount As Integer
 12:
 13:   con.Open()
 14:   Dim dr As OleDbDataReader = cmd.ExecuteReader()
 15:   Dim intCompanyName As Integer = dr.GetOrdinal("CompanyName")
 16:   Dim intContactName As Integer = dr.GetOrdinal("ContactName")
 17:   Dim intPhone As Integer = dr.GetOrdinal("Phone")
 18:   While dr.Read()
 19:     With lblMessage
 20:       .Text &= String.Format("
得意先名:<b>{0}</b><br>", dr(intCompanyName))
 21:       .Text &= String.Format("
担当者名:<b>{0}</b><br>", dr(intContactName))
 22:       .Text &= String.Format("
電話番号:<b>{0}</b><hr>", dr(intPhone))             
 23:     End With
 24:     intRecordCount += 1
 25:   End While
 26:   dr.Close()
 27:   con.Close()
 28:   lblMessage.Text &= _
 29:     String.Format("<b>{0}</b>
件の得意先を抽出しました.", _
 30:     intRecordCount.ToString())
 31: End Sub

 

ADO.NET Accessのホームへ戻る