訪問して頂きありがとうございます。まさふくろーです。
この記事では、データセットのレコードを参照する方法をご紹介します。
目次
データセットのレコードを参照する
データベースのデータをデータセットに設定
New OleDb.OleDbDataAdapter()
New OleDbCommand()
インスタンス化したOleDbCommand.CommandText = 実行するSQL文
インスタンス化したOleDbDataAdapter.SelectCommand = インスタンス化したOleDbCommand
インスタンス化したOleDbDataAdapter.Fill(DataSet型の変数 , テーブル名)
データテーブルの行コレクションを取得
インスタンス化したDataSet.Tables(テーブル名)
インスタンス化したDataTable.Rows
指定した列に格納されている値を取得
DataRow.Item(データテーブルの列名)
New SqlDataAdapter() New SqlCommand() インスタンス化したSqlCommand.CommandText = 実行するSQL文 インスタンス化したSqlDataAdapter.SelectCommand = インスタンス化したSqlCommand Fillメソッドで、データセットにデータを設定 インスタンス化したSqlDataAdapter.Fill(DataSet型の変数 , テーブル名) インスタンス化したDataSet.Tables(テーブル名) インスタンス化したDataTable.Rows DataRow.Item(データテーブルの列名)
サンプルプログラム
OleDbDataAdapterクラスを使用する
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 66 |
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 str As String = String.Empty Dim ds As DataSet = New DataSet() Dim dt As DataTable = New DataTable() 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 Adapter As New OleDb.OleDbDataAdapter() 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 Adapter.SelectCommand = cmd Adapter.Fill(ds, "dt_Product") dt = ds.Tables("dt_Product") For Each dRow As DataRow In dt.Rows str &= dRow.Item("ProductID") & Space(10) & dRow.Item("Name") & ControlChars.NewLine Next End Using End Using Label1.Text = str End Using Catch ex As Exception Label1.Text = Err.Description End Try End Sub End Class |
2 | 「データセットのレコードを参照」ボタンクリック時に以下処理を行う。 |
4~8 | 接続先データベースの情報を、変数に代入。 |
15 | OleDbConnectionクラスのインスタンス化。(Usingステートメントでリソース開放を自動化) |
17~22 | ConnectionStringプロパティにデータベース情報を設定。 |
24 | データベースに接続。 |
26 | OleDbDataAdapterクラスのインスタンス化。(Usingステートメントでリソース開放を自動化) |
27 | OleDbCommandクラスのインスタンス化。(Usingステートメントでリソース開放を自動化) |
29 | SQL文を実行するために、17~22行目で設定したデータベース情報と同じ情報をConnection プロパティに設定。 |
31~35 |
レコードを抽出するSQL文をCommandTextプロパティに設定。 |
34行目の「?」マークは、以下37~38行目で設定するパラメータを使用する際に記述します。 | |
37 | 「Product」テーブルの「ProductID」列の開始番号に、値「707」を設定する。 |
38 | 「Product」テーブルの「ProductID」列の終了番号に、値「710」を設定する。 |
40 | SelectCommandプロパティに実行するSQL文を設定。 |
42 | Fillメソッドを実行し、DataSet型の変数「ds」にデータを設定。 |
44 | データセットから「dt_Product」テーブルのコレクションを取得し、DataTable型の変数「dt」に代入。 |
46 | データテーブルのレコードの件数分、以下処理を繰り返す。 |
48 | 「ProductID」列の値と「Name」列の値を取得し、String型の変数「str」に値を追加していく。 |
55 | 処理が正常に終了したら、変数「str」の値をラベルに表示する。 |
59 | 処理の実行中にエラーが発生した場合、 |
61 | エラー内容を取得し、ラベルに表示する。 |
SqlDataAdapterクラスを使用する
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 |
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 str As String = String.Empty Dim ds As DataSet = New DataSet() Dim dt As DataTable = New DataTable() Try Using conn As New SqlClient.SqlConnection() conn.ConnectionString = " Data Source = " & serverName & ";Initial Catalog = " & dataBase & ";User ID = " & userid & ";Password =" & pwd conn.Open() Using Adapter As New SqlClient.SqlDataAdapter() 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 Adapter.SelectCommand = cmd Adapter.Fill(ds, "dt_Product") dt = ds.Tables("dt_Product") For Each dRow As DataRow In dt.Rows str &= dRow.Item("ProductID") & Space(10) & dRow.Item("Name") & ControlChars.NewLine Next End Using End Using Label1.Text = str End Using Catch ex As Exception Label1.Text = Err.Description End Try End Sub End Class |
2 | 「データセットのレコードを参照」ボタンクリック時に以下処理を行う。 |
4~7 | 接続先データベースの情報を、変数に代入。 |
14 | SqlConnectionクラスのインスタンス化。(Usingステートメントでリソース開放を自動化) |
16~20 | ConnectionStringプロパティにデータベース情報を設定。 |
22 | データベースに接続。 |
24 | SqlDataAdapterクラスのインスタンス化。(Usingステートメントでリソース開放を自動化) |
25 | SqlCommandクラスのインスタンス化。(Usingステートメントでリソース開放を自動化) |
27 | SQL文を実行するために、16~20行目で設定したデータベース情報と同じ情報をConnection プロパティに設定。 |
29~33 |
レコードを抽出するSQL文をCommandTextプロパティに設定。 |
32行目の「@」マークは、以下35~36行目で設定するパラメータを使用する際に記述します。 | |
35 | 「Product」テーブルの「ProductID」列の開始番号に、値「707」を設定する。 |
36 | 「Product」テーブルの「ProductID」列の終了番号に、値「710」を設定する。 |
38 | SelectCommandプロパティに実行するSQL文を設定。 |
40 | Fillメソッドを実行し、DataSet型の変数「ds」にデータを設定。 |
42 | データセットから「dt_Product」テーブルのコレクションを取得し、DataTable型の変数「dt」に代入。 |
44 | データテーブルのレコードの件数分、以下処理を繰り返す。 |
46 | 「ProductID」列の値と「Name」列の値を取得し、String型の変数「str」に値を追加していく。 |
53 | 処理が正常に終了したら、変数「str」の値をラベルに表示する。 |
57 | 処理の実行中にエラーが発生した場合、 |
59 | エラー内容を取得し、ラベルに表示する。 |
関連記事
データベースに接続
Usingステートメント
【VB.NET】UsingステートメントでDisposeメソッドの呼び出しを自動化する
構造化例外処理
最後まで読んでいただき、ありがとうございました!