ADO.NET で SELECT 文の結果を取得する
スポンサーリンク
ADO.NET で SELECT 文の結果を取得するには、System.Data.SqlClient.SqlCommand クラスの ExecuteReader メソッドを使用して、SqlDataReader を構築します。実行する SQL コマンドは、System.Data.SqlClient.SqlCommand クラスの CommandText プロパティに設定します。
SqlCommand クラスのインスタンス自体は、SqlConnection クラスと紐付ける必要があります。SqlCommand クラスの Connection プロパティに SqlConnection を設定する必要があります。確実なのは、System.Data.SqlClient.SqlConnection クラスの CreateCommand メソッドを使うことです。CreateCommand メソッドは、戻り値で SqlConnection に紐付いた SqlCommand のインスタンスが返されます。
ExecuteReader メソッドを使用して、SqlDataReader を構築したら、Read メソッドを使ってレコードの呼び出しをします。この Read メソッドは次のレコードに進める役割があり、戻り値が false の場合は次のレコードが存在しないことを意味します。実際に値を読み込む場合は、必ず Read メソッドの戻り値が true の場合のみに限定しなければなりません。
値を取得するには、フィールド名を指定するか、カラムの序数を指定する必要があります。フィールド名で取得した方が保守性が良いため、フィールド名から取得することをお勧めします。この場合、GetString メソッドや GetValue メソッドにフィールド名を指定するオーバーロードがないので、インデクサ (VB はデフォルト プロパティ) を使ってアクセスすることになります。
説明が重複して、コードが冗長となることを防ぐために、SqlConnection クラスの Open メソッドまでの説明を省きました。引数 cSqlConnection は ADO.NET で SQL Server に接続する で接続が確立された SqlConnection クラスのインスタンスとします。
サンプルコード
以下にサンプルコードを示します。
C# 全般
private static void ExecuteReaderTest(System.Data.SqlClient.SqlConnection cSqlConnection) { // cSqlConnection から SqlCommand のインスタンスを生成する System.Data.SqlClient.SqlCommand hCommand = cSqlConnection.CreateCommand(); // 実行する SQL コマンドを設定する hCommand.CommandText = "SELECT LastName, FirstName FROM Employees"; // 指定した SQL コマンドを実行して SqlDataReader を構築する System.Data.SqlClient.SqlDataReader cReader = hCommand.ExecuteReader(); // hCommand を破棄する (正しくは オブジェクトの破棄を保証する を参照) hCommand.Dispose(); string stPrompt = string.Empty; // 次のレコードに進める (次のレコードがない場合は false になるため実行されない) while (cReader.Read()) { // 列の序数を元に値を取得する stPrompt += cReader[0].ToString(); // 列名を元に値を取得する stPrompt += cReader["FirstName"].ToString(); // 改行コードを追加する stPrompt += System.Environment.NewLine; } // cReader を閉じる (正しくは オブジェクトの破棄を保証する を参照) cReader.Close(); // 結果を表示する MessageBox.Show(stPrompt); }
関連するリファレンス
準備中です。