VB.NETADO.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 クラスのインスタンスとします。

サンプルコード

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

VB.NET 全般
Private Shared Sub ExecuteReaderTest(ByVal cSqlConnection As System.Data.SqlClient.SqlConnection)
    ' cSqlConnection から SqlCommand のインスタンスを生成する
    Dim hCommand As System.Data.SqlClient.SqlCommand = cSqlConnection.CreateCommand()

    ' 実行する SQL コマンドを設定する
    hCommand.CommandText = "SELECT LastName, FirstName FROM Employees"

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

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

    Dim stPrompt As String = String.Empty

    ' 次のレコードに進める (次のレコードがない場合は False になるため実行されない)
    While (cReader.Read())
        ' 列の序数を元に値を取得する
        stPrompt &= cReader(0).ToString()
        ' 列名を元に値を取得する
        stPrompt &= cReader("FirstName").ToString()
        ' 改行コードを追加する
        stPrompt &= System.Environment.NewLine
    End While

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

    ' 結果を表示する
    MessageBox.Show(stPrompt)
End Sub

関連するリファレンス

準備中です。

スポンサーリンク