【VB.NET】テーブルのレコードを抽出するには?

訪問して頂きありがとうございます。まさふくろーです。

この記事では、テーブルのレコードを抽出する方法をご紹介します。

テーブルのレコードを抽出する

  • テーブルのレコードを抽出するには、まず、OleDbCommandクラスをインスタンス化します。
  • 書式は、以下になります。

New OleDbCommand()

  • 次に、OleDbCommandのCommandTextプロパティで、実行するSQL文を設定します。
  • 書式は、以下になります。

インスタンス化したOleDbCommand.CommandText = 実行するSQL文

  • 最後に、OleDbCommandのExecuteReaderメソッドを実行すると、テーブルのレコードが抽出されます。
  • ExecuteReaderメソッドの戻り値は、OleDbDataReader型です。
  • 書式は、以下になります。

インスタンス化したOleDbCommand.ExecuteReader()

  • 条件に一致するレコードがあるかどうかを判断するには、Readメソッドを使います。
  • レコードがある場合は「True」、ない場合は「False」を返します。
  • 書式は、以下になります。

OleDbDataReader.Read()

  • 条件に一致するレコードがある場合、各列の値を取得するには、GetOrdinalメソッド、GetInt32メソッド、GetStringメソッドを使います。
  • まず、GetOrdinalメソッドでテーブルの列番号を取得します。
  • 列番号は、「0」から始まります。
  • 戻り値は、テーブルの列名に対する列番号(Int32型)です。
  • 書式は、以下になります。

テーブルの列番号 = OleDbDataReader.GetOrdinal(テーブルの列名)

  • 次に、GetInt32メソッド、GetStringメソッドで、値を取得します。
  • 書式は、以下になります。

OleDbDataReader.GetInt32(テーブルの列番号)

OleDbDataReader.GetString(テーブルの列番号)

  • SQL Serverに接続する場合は、SqlCommandクラスでも可能です。
  • SqlCommandクラスのインスタンス化

    New SqlCommand()

  • SQL文を設定

    インスタンス化したSqlCommand.CommandText = 実行するSQL文

  • テーブルのレコードを抽出

    インスタンス化したSqlCommand.ExecuteReader()

  • 条件に一致するレコードがあるかどうかを判断する

    SqlDataReader.Read()

  • テーブルの列名に対する列番号の取得

    テーブルの列番号 = SqlDataReader.GetOrdinal(テーブルの列名)

  • テーブルの値を取得

    SqlDataReader.GetInt32(テーブルの列番号)

    SqlDataReader.GetString(テーブルの列番号)

  • テーブルのレコードを抽出するSQL文の基本的な書式は以下になります。

SELECT * FROM テーブル名

WHERE 抽出するレコードを特定する列名 = 値

ORDER BY 列名

サンプルプログラム

OleDbCommandクラスを使用する

2 「テーブルのレコードを抽出」ボタンクリック時に以下処理を行う。
4~10 接続先データベースの情報を、変数に代入。
14 OleDbConnectionクラスのインスタンス化。(Usingステートメントでリソース開放を自動化)
16~21 ConnectionStringプロパティにデータベース情報を設定。
23 データベースに接続。
25 OleDbCommandクラスのインスタンス化。(Usingステートメントでリソース開放を自動化)
27 SQL文を実行するために、16~21行目で設定したデータベース情報と同じ情報をConnection プロパティに設定。
29~33
レコードを抽出するSQL文をCommandTextプロパティに設定。
32行目の「?」マークは、以下35~36行目で設定するパラメータを使用する際に記述します。
35 「Product」テーブルの「ProductID」列の開始番号に、値「707」を設定する。
36 「Product」テーブルの「ProductID」列の終了番号に、値「710」を設定する。
38 SQL文(ProductID列の値が707~710までのレコードを抽出する)を実行し、実行結果をOleDbDataReader型の変数「dread」に代入。
40 変数「dread」の値が「True」の間(抽出したレコード件数分)、以下処理を繰り返す。
44 「ProductID」列の列番号を取得し、Integer型の変数「iIdx1」に代入。
45 「Name」列の列番号を取得し、Integer型の変数「iIdx2」に代入。
47~48 「ProductID」列の値と「Name」列の値を取得し、String型の変数「str」に値を追加していく。
54 処理が正常に終了したら、変数「str」の値をラベルに表示する。
58 処理の実行中にエラーが発生した場合、
60 エラー内容を取得し、ラベルに表示する。

SqlCommandクラスを使用する

2 「テーブルのレコードを抽出」ボタンクリック時に以下処理を行う。
4~9 接続先データベースの情報を、変数に代入。
13 SqlConnectionクラスのインスタンス化。(Usingステートメントでリソース開放を自動化)
15~19 ConnectionStringプロパティにデータベース情報を設定。
21 データベースに接続。
23 SqlCommandクラスのインスタンス化。(Usingステートメントでリソース開放を自動化)
25 SQL文を実行するために、15~19行目で設定したデータベース情報と同じ情報をConnection プロパティに設定。
27~31
レコードを抽出するSQL文をCommandTextプロパティに設定。
30行目の「@」マークは、以下33~34行目で設定するパラメータを使用する際に記述します。
33 「Product」テーブルの「ProductID」列の開始番号に、値「707」を設定する。
34 「Product」テーブルの「ProductID」列の終了番号に、値「710」を設定する。
36 SQL文(ProductID列の値が707~710までのレコードを抽出する)を実行し、実行結果をSqlDataReader型の変数「dread」に代入。
38 変数「dread」の値が「True」の間(抽出したレコード件数分)、以下処理を繰り返す。
42 「ProductID」列の列番号を取得し、Integer型の変数「iIdx1」に代入。
43 「Name」列の列番号を取得し、Integer型の変数「iIdx2」に代入。
45~46 「ProductID」列の値と「Name」列の値を取得し、String型の変数「str」に値を追加していく。
52 処理が正常に終了したら、変数「str」の値をラベルに表示する。
56 処理の実行中にエラーが発生した場合、
58 エラー内容を取得し、ラベルに表示する。

関連記事

データベースに接続

【VB.NET】データベースに接続するには?

Usingステートメント

【VB.NET】UsingステートメントでDisposeメソッドの呼び出しを自動化する

構造化例外処理

【VB.NET】構造化例外処理とは?

最後まで読んでいただき、ありがとうございました!

本のまとめ関連記事はこちら