OleDbDataReaderからフィールド名を指定して値を取得するサンプル

図 OleDb DataReaderからフィールド名を指定して値を取得するサンプル
このサンプルは、AccessのNwind.mdbデータベースの得意先テーブルからレコードを抽出して表示します。OleDbDataReaderからはフィールド名を指定して値を取得します。
このサンプルでは、以下のノウハウを習得することができます。
▲ SQLのSelect Topオプションの使い方
▲ OleDbDataReaderのRead()メソッドの使い方
▲ OleDbDataReaderからフィールド名を指定して値を取得する方法
サンプルのPage_Load()イベントでは、得意先テーブルからレコードを抽出して表示しています。行7では、得意先テーブルから5件のレコードを抽出するSQLを生成しています。SelectステートメントのTop 5は、先頭から5件のレコードを抽出することを意味します。このオプションは、得意先の売上高を降順に並べ替えて利用すると便利です。たとえば、売上高ベスト10を表示するには、次のようなSQLを使用します。
Select Top 10 * From Sales Order By SalesAmount Desc
ダイレクトメールのラベルを印刷するときは、Top n Percentオプションを使用すると便利です。たとえば、売上高上位10パーセントの得意先にダイレクトメールを送信するときは、次のようなSQLを使用します。
Select Top 10 Percent * From Sales Order By SalesAmount Desc
行8-10では、OleDbConnectionとOleDbCommandのインスタンスを生成しています。行13では、OleDbConnectionのOpen()メソッドでAccessのNwind.mdbデータベースを開いています。行14では、OleDbCommandのExecuteReader()メソッドでSQLのSelectステートメントを実行しています。ExecuteReader()メソッドは、得意先テーブルのOleDbDataReaderを生成して返します。行15-22のWhile…End Whileでは、OleDbDataReaderのRead()メソッドでEOFになるまでレコードを読み込みます。行16-20のWith…End Withでは、LabelのTextプロパティに得意先テーブルの得意先名、担当者名、電話番号を設定しています。OleDbDataReaderからフィールドの値を取得するには、引数にフィールド名を指定します。たとえば、得意先名を取得するには次のように記述します。
myDataReader.Item(“CompanyName”)
myDataReader(“CompanyName”)
OleDbDataReaderのItemプロパティは、省略することができます。
行23では、OleDbDataReaderのClose()メソッドで得意先テーブルを閉じています。行24では、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: While dr.Read()
16: With lblMessage
17: .Text &=
String.Format("得意先名:<b>{0}</b><br>", dr("CompanyName"))
18: .Text &=
String.Format("担当者名:<b>{0}</b><br>", dr("ContactName"))
19: .Text &=
String.Format("電話番号:<b>{0}</b><hr>", dr("Phone"))
20: End With
21: intRecordCount += 1
22: End While
23: dr.Close()
24: con.Close()
25: lblMessage.Text &= _
26:
String.Format("<b>{0}</b>件の得意先を抽出しました.", _
27:
intRecordCount.ToString())
28: End Sub