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 クラスのインスタンスとします。
サンプルコード
以下にサンプルコードを示します。
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
関連するリファレンス
準備中です。