訪問して頂きありがとうございます。まさふくろーです。
この記事では、テーブルのレコードを抽出する方法をご紹介します。
テーブルのレコードを抽出する
New OleDbCommand()
インスタンス化したOleDbCommand.CommandText = 実行するSQL文
インスタンス化したOleDbCommand.ExecuteReader()
OleDbDataReader.Read()
テーブルの列番号 = OleDbDataReader.GetOrdinal(テーブルの列名)
OleDbDataReader.GetInt32(テーブルの列番号)
OleDbDataReader.GetString(テーブルの列番号)
New SqlCommand() インスタンス化したSqlCommand.CommandText = 実行するSQL文 インスタンス化したSqlCommand.ExecuteReader() 条件に一致するレコードがあるかどうかを判断する SqlDataReader.Read() テーブルの列名に対する列番号の取得 テーブルの列番号 = SqlDataReader.GetOrdinal(テーブルの列名) テーブルの値を取得 SqlDataReader.GetInt32(テーブルの列番号) SqlDataReader.GetString(テーブルの列番号)
SELECT * FROM テーブル名
WHERE 抽出するレコードを特定する列名 = 値
ORDER BY 列名
サンプルプログラム
OleDbCommandクラスを使用する
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
Public Class Form1 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Dim prov As String = "SQLOLEDB" Dim serverName As String = "TEST-PC\SQLEXPRESS" Dim dataBase As String = "AdventureWorksLT2017" Dim userid As String = "test" Dim pwd As String = "test" Dim dread As OleDb.OleDbDataReader Dim str As String = String.Empty Try Using conn As New OleDb.OleDbConnection() conn.ConnectionString = " Provider = " & prov & ";Data Source = " & serverName & ";Initial Catalog = " & dataBase & ";User ID = " & userid & ";Password =" & pwd conn.Open() Using cmd As New OleDb.OleDbCommand() cmd.Connection = conn cmd.CommandText = "SELECT * " & ControlChars.NewLine & "FROM SalesLT.Product " & ControlChars.NewLine & "WHERE ProductID BETWEEN ? AND ? " & ControlChars.NewLine & "ORDER BY ProductID " & ControlChars.NewLine cmd.Parameters.Add("@ProductID_St", OleDb.OleDbType.Integer).Value = 707 cmd.Parameters.Add("@ProductID_End", OleDb.OleDbType.Integer).Value = 710 dread = cmd.ExecuteReader() Do While dread.Read() Dim iIdx1 As Integer, iIdx2 As Integer iIdx1 = dread.GetOrdinal("ProductID") iIdx2 = dread.GetOrdinal("Name") str &= "ProductID:" & dread.GetInt32(iIdx1) & Space(6) & "Name:" & dread.GetString(iIdx2) & ControlChars.NewLine Loop End Using Label1.Text = str End Using Catch ex As Exception Label1.Text = Err.Description End Try End Sub End Class |
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クラスを使用する
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
Public Class Form1 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Dim serverName As String = "TEST-PC\SQLEXPRESS" Dim dataBase As String = "AdventureWorksLT2017" Dim userid As String = "test" Dim pwd As String = "test" Dim dread As SqlClient.SqlDataReader Dim str As String = String.Empty Try Using conn As New SqlClient.SqlConnection() conn.ConnectionString = " Data Source = " & serverName & ";Initial Catalog = " & dataBase & ";User ID = " & userid & ";Password =" & pwd conn.Open() Using cmd As New SqlClient.SqlCommand() cmd.Connection = conn cmd.CommandText = "SELECT * " & ControlChars.NewLine & "FROM SalesLT.Product " & ControlChars.NewLine & "WHERE ProductID BETWEEN @ProductID_St AND @ProductID_End " & ControlChars.NewLine & "ORDER BY ProductID " & ControlChars.NewLine cmd.Parameters.Add("@ProductID_St", SqlDbType.Int).Value = 707 cmd.Parameters.Add("@ProductID_End", SqlDbType.Int).Value = 710 dread = cmd.ExecuteReader() Do While dread.Read() Dim iIdx1 As Integer, iIdx2 As Integer iIdx1 = dread.GetOrdinal("ProductID") iIdx2 = dread.GetOrdinal("Name") str &= "ProductID:" & dread.GetInt32(iIdx1) & Space(6) & "Name:" & dread.GetString(iIdx2) & ControlChars.NewLine Loop End Using Label1.Text = str End Using Catch ex As Exception Label1.Text = Err.Description End Try End Sub End Class |
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 | エラー内容を取得し、ラベルに表示する。 |
関連記事
データベースに接続
Usingステートメント
【VB.NET】UsingステートメントでDisposeメソッドの呼び出しを自動化する
構造化例外処理
最後まで読んでいただき、ありがとうございました!