J#(Java)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 クラスのインスタンスとします。

サンプルコード

以下にサンプルコードを示します。

J# 全般
private static final void ExecuteReaderTest(System.Data.SqlClient.SqlConnection cSqlConnection) {
    // cSqlConnection から SqlCommand のインスタンスを生成する
    System.Data.SqlClient.SqlCommand hCommand = cSqlConnection.CreateCommand();

    // 実行する SQL コマンドを設定する
    hCommand.set_CommandText("SELECT LastName, FirstName FROM Employees");

    // 指定した SQL コマンドを実行して SqlDataReader を構築する
    System.Data.SqlClient.SqlDataReader cReader = hCommand.ExecuteReader();

    // hCommand を破棄する (正しくは オブジェクトの破棄を保証する を参照)
    hCommand.Dispose();

    String stPrompt = System.String.Empty;

    // 次のレコードに進める (次のレコードがない場合は false になるため実行されない)
    while (cReader.Read()) {
        // 列の序数を元に値を取得する
        stPrompt += cReader.get_Item(0);
        // 列名を元に値を取得する
        stPrompt += cReader.get_Item("FirstName");
        // 改行コードを追加する
        stPrompt += System.Environment.get_NewLine();
    }

    // cReader を閉じる (正しくは オブジェクトの破棄を保証する を参照)
    cReader.Close();

    // 結果を表示する
    MessageBox.Show(stPrompt);
}

関連するリファレンス

準備中です。

スポンサーリンク