DBテーブル検索 [プロバイダファクトリ]

Visual Basic ADO.NET [Community Express]

プロバイダファクトリ 商品マスターテーブル検索

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

名前空間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