今回もデータベースを扱うプログラムを
御紹介させていただければと思います。
御紹介させていただければと思います。
前回の記事でSqlCommandを使用し、
SQLコマンドを実行する方法を御紹介いたしました。
SqlCommandのExecuteReaderメソッドでSQLのSELECT文を実行すると
DataReaderオブジェクトが生成されます。
(前回の記事:データベースに対しSQLコマンドを実行する)
今回は生成されたDataReaderオブジェクトを利用し
SELECT文で取得したデータを取り扱う方法を御紹介いたします。
実際のシステムではデータベースに登録された情報を画面に表示したり、
印刷物としての伝票類や帳票類を作成することがありますが、
今回ご紹介する方法でデータを取得し変数へ格納するなどの
処理が可能となります。
SQLコマンドで取得されたデータを
DataReaderオブジェクトで参照するにはReadメソッドで
レコードへアクセスします。
DataReaderオブジェクトを作成したばかりの状態では
先頭レコードの前を参照している状態です。
一度Readメソッドを実行すると1件目のレコードが参照され、
以降Readメソッド実行するたびに次のレコードが順に参照されます。
Readメソッドで先頭から順に1件づつ
レコードを読み進めていくイメージですね。
このReadメソッドの戻り値として次のレコードが読み込めた場合True、
次のレコードが読み込めなかった場合(=データが存在しなかった場合)、
Falseが戻り値として返されます。
ですのでWhile文で順にレコードを読み込んで
データ参照することが可能となります。
ですのでWhile文で順にレコードを読み込んで
データ参照することが可能となります。
While redGetData.Read
'データに対する処理
End While
SQLコマンドを実行し、レコードが1件も存在しない場合は
1回目のReadメソッドで戻り値がFalseとなるので、
While~End While内の処理は一度も実行されないことになります。
続いてReadメソッドで参照されているレコードの
各フィールドの値を参照する方法です。
各フィールドの値を取得する方法としては
フィールド名を指定するか、取得したフィールドの位置の序数を措定して取得します。
実行したSQLコマンド → SELECT CustomerID, CustomerName FROM CustomerTable
redGetData(0) → CustomerIDの値
redGetData(1) → CustomerNameの値
redGetData("CustomerID") → CustomerIDの値
redGetData("CustomerName") → CustomerNameの値
SQLコマンドで取得したフィールド位置の序数で参照すると
可読性・メンテナンス性が悪いように思いますので、
フィールド名で参照する方法をお勧めいたします。
最後にColseメソッドでDataReaderオブジェクトを閉じておきます。
redGetData.Close
上記の方法で各レコードの値を取得することが可能です。
Readメソッドで1件づつ先頭レコードから移動しながら
フィールド名を指定し各フィールの値を取得するという方法です。
ではサンプルを見てみましょう。
データベースに対しSQL文を実行し、
取得したデータを順に変数へ格納するサンプルです。
(データベースへの接続の確立は省略しております。)
Private Sub prcDataOperation()
Dim strCommand As String '実行するSQLコマンド
Dim redGetData As SqlDataReader 'SELECT文の結果を格納するオブジェクト
Dim strCommand As String '実行するSQLコマンド
Dim redGetData As SqlDataReader 'SELECT文の結果を格納するオブジェクト
Dim intID() As Integer 'CustomerIDを格納する変数
Dim strName() As String 'CustomerNameを格納する変数'変数を初期化しておきます。
Redim intID(0)
Redim strName(0)
'実行するSQLコマンドを作成しておく
strCommand = "SELECT CustomerID, CustomerName FROM CustomerTable;"
strCommand = "SELECT CustomerID, CustomerName FROM CustomerTable;"
'SqlCommandを作成する
Using cmdSQL As New SqlCommand
With cmdSQL
.Connection = conSQLConnect 'SQL接続を指定
.CommandType = CommandType.Text 'SQLのテキストコマンドと評価
.CommandText = strCommand '実行するSQLコマンドを指定
End With
.Connection = conSQLConnect 'SQL接続を指定
.CommandType = CommandType.Text 'SQLのテキストコマンドと評価
.CommandText = strCommand '実行するSQLコマンドを指定
End With
'SQLコマンドを実行しSqlDataReaderを生成
redGetData = cmdSQL.ExecuteReader
'Readメソッドで順にレコードを参照する
While redGetData.Read
'変数の配列を一つ増やす
ReDim Preserve intID(UBound(intID) + 1)
ReDim Preserve strName(UBound(strName) + 1)
'変数の配列を一つ増やす
ReDim Preserve intID(UBound(intID) + 1)
ReDim Preserve strName(UBound(strName) + 1)
'変数の最後尾にレコードの値を格納
intID(UBound(intID))=redGetData("CustomerID")
strName(UBound(strName))=redGetData("CustomerName")
End While
'DataReaderを閉じる
redGetData.Close
End Using
End Sub
End Sub
以上のサンプルでデータベースから取得したレコードの値を
変数へ格納することが可能です。
ここまでできれば変数へ格納した値を画面に表示したり、
印刷したりなどしてデータベースの値を利用することが可能となります。
今回も簡単な御紹介となっておりますので、
MicroSoftのドキュメントなども参考にしていただければ幸いです。
また、SQLの文法や様々なテクニックも今後御紹介できればと思います。
他にもいろいろと方法もございますし、
開発するシステムによっては、よりふさわしい方法もあるかと思いますが、
御参考にしていただければと思います。
サンプルはVB.NETで作成しておりますが、
考え方はどんな言語でも同じですので、
参考にしていただければと思います。
変数へ格納することが可能です。
ここまでできれば変数へ格納した値を画面に表示したり、
印刷したりなどしてデータベースの値を利用することが可能となります。
今回も簡単な御紹介となっておりますので、
MicroSoftのドキュメントなども参考にしていただければ幸いです。
また、SQLの文法や様々なテクニックも今後御紹介できればと思います。
他にもいろいろと方法もございますし、
開発するシステムによっては、よりふさわしい方法もあるかと思いますが、
御参考にしていただければと思います。
サンプルはVB.NETで作成しておりますが、
考え方はどんな言語でも同じですので、
参考にしていただければと思います。
0 件のコメント:
コメントを投稿