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

図 OleDb DataReaderからインデックス番号を指定して値を取得するサンプル
このサンプルは、AccessのNwind.mdbデータベースの得意先テーブルからレコードを抽出して表示します。OleDbDataReaderからはフィールド(カラム)のインデックス番号を指定して値を取得します。
このサンプルでは、以下のノウハウを習得することができます。
▲ SQLのSelect Topオプションの使い方
▲ OleDbDataReaderのRead()メソッドの使い方
▲ OleDbDataReaderからフィールドのインデックス番号を指定して値を取得する方法
サンプルのPage_Load()イベントでは、AccessのNwind.mdbデータベースから得意先テーブルのレコードを抽出して表示します。行7では、得意先テーブルからレコードを抽出するSQLを生成しています。SelectステートメントのTop 5は、得意先テーブルの先頭から5件のレコードを抽出することを意味します。行8-10では、OleDbConnectionとOleDbCommandのインスタンスを生成しています。
行13では、OleDbConnectionのOpen()メソッドでAccessのNwind.mdbデータベースを開いています。行14では、OleDbCommandのExecuteReader()メソッドで得意先テーブルのOleDbDataReaderを生成しています。行15-17では、OleDbDataReaderのGetOrdinal()メソッドでフィールド(カラム)のインデックス番号(Ordinal Number)を取得して変数に保存しています。GetOrdinal()メソッドの引数には、フィールド名を指定します。
行18-25のWhile…End Whileでは、OleDbDataReaderのRead()メソッドでEOFになるまで得意先テーブルのレコードを読み込んでいます。行19-23のWith…End Withでは、LabelのTextプロパティに得意先テーブルの得意先名、担当者名、電話番号を設定して表示しています。OleDbDataReaderからフィールド値を取得するとき、フィールド名を指定する代わりにフィールドのインデックス番号を指定しています。OleDbDataReaderからフィールド値を取得するには、フィールド名を指定するよりもフィールドのインデックス番号を指定した方が高速です。
行26では、OleDbDataReaderのClose()メソッドで得意先テーブルを閉じています。行27では、OleDbConnectionのClose()メソッドでAccessのNwind.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