DataReaderオブジェクト

■ データソースごとのクラス

接続の種類 クラス名
System.Data.SqlClient SqlDataReaderクラス
System.Data.OracleClient OracleDataReaderクラス
System.Data.OleDb OleDbDataReaderクラス
System.Data.Odbc OdbcDataReaderクラス
DataReaderオブジェクトの種類

 SqlDataReaderクラスは、データベースからSQL文の実行結果を読み込む際に使用するクラスです。データベースに接続した状態で使います。このクラスのメソッドを使って1件ずつ読み込むことができます。読み込むときにはカーソル(指し棒)の考え方を使います。カーソルを動かして、カーソルが指す行を読み込みます。

■ 主なプロパティ

プロパティ名 概要
Connection SqlDataReaderオブジェクトに関連付けられているSqlConnectionオブジェクトを取得する
FieldCount 現在の行の列数を取得する
HasRows SqlDataReaderオブジェクトに1行以上の行が格納されているかどうかを取得する
Item[Int32] 列の順番を指定して値を取得する
Item[String] 列名を指定して値を取得する
SqlDataReaderの主なプロパティ

■ 主なメソッド

メソッド名 概要
Close SqlDataReaderオブジェクトを閉じる
GetDouble 指定した列の値をdouble型として取得する
GetInt32 指定した列の値をint型として取得する
GetName 指定した列の名前を取得する
GetString 指定した列の値をstring型として取得する
GetValues 現在の行の値をオブジェクト配列に設定する
Read カーソルを次のレコードに進める
SqlDataReaderの主なメソッド

○ プロジェクト

 プロジェクトを作成して確認してみましょう。Usersテーブルからデータを読み込むプログラムを作成してみましょう。

プロジェクトの種類 コンソール アプリケーション
プロジェクト名 DataReaderTest

サンプルダウンロード

○ 作成の準備

 「CommandTest」プロジェクトを修正して作成しましょう。CommandTestフォルダーをコピーして、作成するプロジェクト名にフォルダー名を変更してください。

○ プログラム

 Mainメソッドに次のように記述してください。

Module1.vb

  1. Sub Main()
  2.  '接続文字列
  3.  Dim constr As String = "Data Source=(LocalDB)\v11.0;AttachDbFilename=C:\Work\Books.mdf;Integrated Security=True;Connect Timeout=30"
  4.  'SqlConnectionオブジェクトを生成
  5.  Dim con As SqlConnection = New SqlConnection(constr)
  6.  'Usersテーブルのデータを取得するSQL文を作成
  7.  Dim sql As String = "SELECT * FROM Users"
  8.  'SqlCommandオブジェクトを生成
  9.  Dim cmd As New SqlCommand(sql, con)
  10.  'データベースを開く
  11.  con.Open()
  12.  'SQL文を実行する
  13.  Dim dr As SqlDataReader = cmd.ExecuteReader()
  14.  'データリーダーの情報を表示する
  15.  Console.WriteLine("列数:{0}", dr.FieldCount)
  16.  Console.WriteLine("データがあるか?:{0}", dr.HasRows)
  17.  Console.WriteLine()
  18.  'データを取得する
  19.  While dr.Read()
  20.   Console.Write("ID:{0} ", dr(0))
  21.   Console.Write("ユーザー名:{0} ", dr("UserName"))
  22.   Console.Write("パスワード:** ")
  23.   Console.Write("氏名:{0}", dr.GetString(3))
  24.   Console.WriteLine()
  25.  End While
  26.  'データリーダーを閉じる
  27.  dr.Close()
  28.  'データベースを閉じる
  29.  con.Close()
  30.  Console.ReadLine()
  31. End Sub

○ 実行結果

列数:4
データがあるか?:True

ID:1 ユーザー名:sato パスワード:** 氏名:佐藤
ID:2 ユーザー名:suzuki パスワード:** 氏名:鈴木
ID:3 ユーザー名:takahashi パスワード:** 氏名:高橋
ID:4 ユーザー名:tanaka パスワード:** 氏名:田中

○ 解説

 13行目で、Usersテーブルから全件取得するSQL文を作成しています。そして、22行目でSQL文を実行しています。ExecuteReaderメソッドはSqlDataReaderオブジェクトを返します。このオブジェクトを使って、SQL文の実行結果を取り出します。このオブジェクトは、初期状態でカーソルは1件目の前を指しています。データを読み込む場合は、30行目にあるようにReadメソッドを呼び出してカーソルをずらします。今回はWhile文の条件でReadメソッドを使っていますが、Readメソッドはカーソルで指すデータがなくなるとFalseを返すので、レコードがある間繰り返すようになります。

 31~34行目でカーソルが指しているレコードのデータを読み込んでいます。それぞれの行でデータの読み込み方を変えています。データを読み込み終わった後、39行目でSqlDataReaderを閉じています。これ以降、SqlDataReaderを使ってSQL文の実行結果を読み込むことができなくなります。

データベースとDataReaderオブジェクトの関係
データベースとDataReaderオブジェクトの関係

 ここまで見てきたデータベースからデータを読み取る方法は接続型を利用しました。つまり、データベースに接続して処理をしました。データベースへの接続を閉じた後は処理ができません。

前へ   次へ