ADO.NET Accessのホームへ戻る

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

 OleDb DataReaderからフィールドのデータ型を指定して値を取得するサンプル

 

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

 

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

 

  SQLSelect Topオプションの使い方

  OleDbDataReaderRead()メソッドの使い方

  OleDbDataReaderからフィールドのデータ型を指定して値を取得する方法

  IsDBNull()メソッドの使い方

 

サンプルの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からフィールド値を取得するとき、データ型を指定しています。たとえば、文字型のフィールド値を取得するときは、GetString()メソッドを使用します。GetString()メソッドの引数には、フィールドのインデックス番号を指定します。

 

intProductID = myDataReader.GetInt32(intProductIDOrdinal)

strProductName = myDataReader.GetString(intProductNameOrdinal)

If Not myDataReader.IsDBNull(intUnitPriceOrdinal) Then

 decUnitPrice = myDataReader.GetDecimal(intUnitPriceOrdinal)

Else

  decUnitPrice = 0

End If

 

データ型を指定して値を取得するときは、データ型の変換が行われないため高速です。フィールドにNullが含まれるときは、IsDBNull()メソッドで事前に確認する必要があります。

 

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.GetString(intCompanyName))
 21:       .Text &= String.Format("
担当者名:<b>{0}</b><br>", dr.GetString(intContactName))
 22:       .Text &= String.Format("
電話番号:<b>{0}</b><hr>", dr.GetString(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のホームへ戻る