マスター表検索関数 [ADO.NET][VB 2013]

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

   やさしいVB 2010 / 2008 ADO.NET

主キーコードを引数に指定して、マスター表から引数のレコードを取得する関数を作成します。

商品マスター表のレコードを取得する関数

商品検索画面

マスター表検索で作成したプログラムを修正して、商品マスターテーブルからレコードを取得する部分を関数化します。

商品マスター表(テーブル)からレコードを取得するために、引数として商品コードを指定するようにします。

返値はDataTable型にします。取得したレコードデータをセットし、取得できたか否かは、Rowプロパティでレコード数を調べてチェックします。

Option Strict On
Imports System.Data.SqlClient
Imports System.Configuration    ' 参照の追加で System.Configurationを追加

Public Class RetrievalFuntion

    '-------------------------------------------------------------
    ' ■ 検索ボタンクリック処理 ■
    '-------------------------------------------------------------
    Private Sub BtnRetrieval_Click(ByVal sender As System.Object, _
      ByVal e As System.EventArgs) Handles BtnRetrieval.Click

      ' 商品コード未入力ならエラー
      If TxtShohinCode.Text = Nothing Then
          MessageBox.Show("商品コードが未入力","エラー")
          Exit Sub
      End If

      ' 商品マスター表からレコード取得
      Try
          Dim dt As New DataTable
          dt = GetShohinMasterData(TxtShohinCode.Text)
          If dt.Rows.Count = 1 Then
              ' レコードがあった時
              LblShohinMei.Text = CStr(dt.Rows(0)("商品名称"))
              LblHanbaiTanka.Text = CStr(dt.Rows(0)("販売単価"))
          Else
              ' レコードが無かった時
              LblShohinMei.Text = Nothing
              LblHanbaiTanka.Text = Nothing
              MessageBox.Show("データがありません","エラー")
           End If

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

  End Sub

  '-------------------------------------------------------------
  ' ■ 商品マスター表からレコードを取得する関数 ■
  '-------------------------------------------------------------
  Public Function GetShohinMasterData(ByVal sCode As String) As DataTable

      Dim retDt As New DataTable    ' リターン値

      ' 接続文字列をapp.configファイルから取得
      Dim settings As ConnectionStringSettings
      settings = _
          ConfigurationManager.ConnectionStrings("販売管理ConString")
      If settings Is Nothing Then
          ' 接続文字列取得エラー
          Throw New Exception("app.configに未登録")
          Exit Try
      End If

      Using con As New SqlConnection
          Using cmd As New SqlCommand
              ' 接続文字列の設定
              con.ConnectionString = settings.ConnectionString
              ' SqlCommand.Connectionプロパティの設定
              cmd.Connection = con
              ' SQL文設定
              cmd.CommandText = "SELECT * FROM 商品マスター表 " & _
                                "WHERE 商品コード = @sCode"
              ' SQL文の引数設定
              cmd.Parameters.Clear()
              ' パラメータの実際のサイズからデータ長を推論
              cmd.Parameters.Add("@sCode",sqlDbType.NChar)
              cmd.Parameters("@sCode").Value = sCode
              ' レコード取得
              Dim da As New SqlDataAdapter
              da.SelectCommand = cmd
              da.Fill(retDt)

          End Using
      End Using

      Return retDt    ' ◆リターン

    End Function

End Class

商品マスター表(テーブル)からレコードを取得するように関数を作れば分かりますが、他のテーブルでは使えません。そのためにテーブルの数だけレコード検索関数を実装することになってしまいます。

しかし、異なる部分はわずかです。そこで次回は、レコード取得関数を発展させて、複数のテーブルでも利用できるようにクラスメソッドに改良して実装します。


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