データベースのテーブルからシングルレコードを抽出するサンプル

図 データベースのテーブルからシングルレコードを抽出するサンプル
このサンプルは、AccessのNwind.mdbデータベースの得意先テーブルからシングルレコードを抽出して表示します。得意先テーブルからシングルレコードを抽出するには、OleDbCommandのExecuteReader()メソッドにCommandBehavior.SingleRowを指定します。CommandBehaviorにはこの他に、CloseConnection、KeyInfo、SchemaOnly、SingleResultなどのオプションがあります。
このサンプルでは、以下のノウハウを習得することができます。
▲ SQLのSelectステートメントにフィールド名を指定する方法
▲ OleDbCommandのExecuteReader()メソッドのCommandBehavior.SingleRowの使い方
サンプルのPage_Load()イベントでは、得意先テーブルからシングルレコードを抽出して表示します。行7では、得意先テーブルから得意先名、担当者名、電話番号を抽出するSQLを生成しています。行8-10では、OleDbConnectionとOleDbCommandのインスタンスを生成しています。
行13では、OleDbConnectionのOpen()メソッドでAccessのNwind.mdbデータベースを開いています。行14では、OleDbCommandのExecuteReader()メソッドで得意先テーブルのOleDbDataReaderを生成しています。ExecuteReader()メソッドの引数にCommandBehavior.SingleRowを指定していますので、得意先テーブルからシングルレコードが抽出されます。SQLのSelectステートメントにTop 1を指定したのと同じ結果になります。
行15-22のWhile…End Whileでは、OleDbDataReaderのRead()メソッドでEOFになるまで得意先テーブルののレコードを読み込みます。行16-21のWith…End Withでは、LabelのTextプロパティに得意先テーブルの得意先名、担当者名、電話番号を設定しています。OleDbDataReaderからフィールド値を取得するとき、GetString()メソッドを使用して高速化しています。GetString()の引数には、フィールドのインデックス番号を指定します。行20では、レコード件数を累計しています。
行23では、OleDbDataReaderのClose()メソッドで得意先テーブルを閉じています。行24では、OleDbConnectionのClose()メソッドでAccessのNwind.mdbデータベースを閉じています。行25-27では、LabelのTextプロパティにレコード件数を設定して表示しています。SQLのSelectステートメントでは、得意先テーブルからすべてのレコードを抽出するようにしていますが、ExecuteReader()メソッドの引数にCommandBehavior.SingleRowを指定していますので1件のレコードが抽出されます。
6: Sub Page_Load()
7: Dim strSqlSelect As String = "Select
CompanyName, ContactName, Phone 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(CommandBehavior.SingleRow)
15: While dr.Read()
16: With lblMessage
17: .Text &=
String.Format("得意先名:<b>{0}</b><br>", dr.GetString(0))
18: .Text &=
String.Format("担当者名:<b>{0}</b><br>", dr.GetString(1))
19: .Text &=
String.Format("電話番号:<b>{0}</b><hr>", dr.GetString(2))
20:
intRecordCount += 1
21: End With
22: End While
23: dr.Close()
24: con.Close()
25: lblMessage.Text &= _
26:
String.Format("<b>{0}</b>件の得意先を抽出しました.", _
27:
intRecordCount.ToString())
28: End Sub