プロバイダファクトリでデータ検索[VB 2013]

Visual Basic 2010/2008 やさしいADO.NET DBプログラム

   やさしいVB 2010 / 2008 ADO.NET

プロバイダファクトリDbProviderFactoryを利用して、マスターテーブル検索のプログラムを作成します。

DbCommand, DbParameter, DbDataAdapter

名前空間System.Data.CommonのDbProviderFactoryインスタンスを生成して、ここから、 DbConnection、DbCommand、DbParameter、DbDataAdapter のインスタンスを生成すれば、汎用的プログラムを作成できます。

たとえば、DBMSを変更しても、インスタンス生成時の引数や、接続文字列の取得など、最小限の変更ですみます。

    ' DbProviderFactoryインスタンス生成
    fa = DbProviderFactories.GetFactory("System.Data.SqlClient")
    ' 接続文字列をapp.configファイルから取得
    settings = ConfigurationManager.ConnectionStrings("販売管理ConnectionString")
フォーム

DbProviderFactoryインスタンスを生成して、SQLServer 2008 Express Edition の販売管理データベースの社員テーブルから、入力した社員コードのデータを表示するプログラムを作成します。

最初に、参照の追加で、System.Configurationを追加して、プロジェクトにインポートしてください。System.Data.Commonもインポートします。

検索ボタンクリック処理は、次のように実装します。

  • 入力した社員コードのエラーチェックし、エラーあればエラーメッセージを表示
  • 例外をキャッチしたときも、同様に例外メッセージを表示
  • エラーがなければ、社員テーブルからDbDataAdapterクラスのFillメソッドを使って、該当レコードを取得
  • 取得したデータを画面に表示
Option Strict On
Imports System.Data.Common
Imports System.Configuration

Public Class FormProviderFactoryRetrieval

  Private Sub BtnRetrieval_Click _
      (ByVal sender As System.Object, ByVal e As System.EventArgs) _
      Handles BtnRetrieval.Click

      ' 入力エラーチェック
      If TxtTokuisakiCode.Text = Nothing Then
          MessageBox.Show("得意先コードが未入力です", "エラー")
          Exit Sub
      End If

      Try
          ' SQL ServerのDbProviderFactoryインスタンス生成
          Dim fa As DbProviderFactory
          fa = DbProviderFactories.GetFactory("System.Data.SqlClient")

          ' DbConnection, DbCommandクラスのインスタンス生成
          Using con As DbConnection = fa.CreateConnection()
            Using cmd As DbCommand = fa.CreateCommand()
                Dim settings As ConnectionStringSettings

                ' 接続文字列をapp.configファイルから取得
                settings = ConfigurationManager. _
                    ConnectionStrings("販売管理ConnectionString")

                If settings Is Nothing Then
                    ' 接続文字列取得エラー
                    MessageBox.Show("app.configに未登録","接続文字列")
                    Exit Sub
                Else
                    ' 接続文字列の設定
                    con.ConnectionString = settings.ConnectionString

                    ' Connectionプロパティの設定
                    cmd.Connection = con
                End If

                ' SQL文の設定
                cmd.CommandText = "SELECT * FROM 得意先マスター表" & _
                    " WHERE 得意先コード = @KeyValue"

                ' SQL文の引数設定
                Dim par As DbParameter = fa.CreateParameter()
                par.ParameterName = "@KeyValue"
                par.Value = TxtTokuisakiCode.Text
                cmd.Parameters.Add(par)

                ' DbDataAdapterクラスのインスタンス生成
                Dim da As DbDataAdapter
                da = fa.CreateDataAdapter

                ' レコード取得
                Dim dt As New DataTable()
                da.SelectCommand = cmd
                da.Fill(dt)
                If dt.Rows.Count = 1 Then
                    ' レコードがあった時
                    LblTokuisakiMeisho.Text = CStr(dt.Rows(0)("得意先名称"))
                    LblTokuisakiJusho.Text = CStr(dt.Rows(0)("得意先住所"))
                Else
                    ' レコードが無い時
                    LblTokuisakiMeisho.Text = Nothing
                    LblTokuisakiJusho.Text = Nothing
                    MessageBox.Show _
                        ("入力した得意先コードのデータなし", "入力エラー")
                End If

            End Using
          End Using

      Catch ex As Exception
          MessageBox.Show(ex.ToString, "【例外発生】")

      End Try

  End Sub

End Class

Copyright© やさしいVB2012/2010 ADO.NET. All rights reserved.