接続の種類 | クラス名 |
---|---|
System.Data.SqlClient | SqlDataReaderクラス |
System.Data.OracleClient | OracleDataReaderクラス |
System.Data.OleDb | OleDbDataReaderクラス |
System.Data.Odbc | OdbcDataReaderクラス |
SqlDataReaderクラスは、データベースからSQL文の実行結果を読み込む際に使用するクラスです。データベースに接続した状態で使います。このクラスのメソッドを使って1件ずつ読み込むことができます。読み込むときにはカーソル(指し棒)の考え方を使います。カーソルを動かして、カーソルが指す行を読み込みます。
プロパティ名 | 概要 |
---|---|
Connection | SqlDataReaderオブジェクトに関連付けられているSqlConnectionオブジェクトを取得する |
FieldCount | 現在の行の列数を取得する |
HasRows | SqlDataReaderオブジェクトに1行以上の行が格納されているかどうかを取得する |
Item[Int32] | 列の順番を指定して値を取得する |
Item[String] | 列名を指定して値を取得する |
メソッド名 | 概要 |
---|---|
Close | SqlDataReaderオブジェクトを閉じる |
GetDouble | 指定した列の値をdouble型として取得する |
GetInt32 | 指定した列の値をint型として取得する |
GetName | 指定した列の名前を取得する |
GetString | 指定した列の値をstring型として取得する |
GetValues | 現在の行の値をオブジェクト配列に設定する |
Read | カーソルを次のレコードに進める |
○ プロジェクト
プロジェクトを作成して確認してみましょう。Usersテーブルからデータを読み込むプログラムを作成してみましょう。
プロジェクトの種類 | コンソール アプリケーション |
---|---|
プロジェクト名 | DataReaderTest |
○ 作成の準備
「CommandTest」プロジェクトを修正して作成しましょう。CommandTestフォルダーをコピーして、作成するプロジェクト名にフォルダー名を変更してください。
○ プログラム
Mainメソッドに次のように記述してください。
Module1.vb
○ 実行結果
列数: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文の実行結果を読み込むことができなくなります。
ここまで見てきたデータベースからデータを読み取る方法は接続型を利用しました。つまり、データベースに接続して処理をしました。データベースへの接続を閉じた後は処理ができません。