ExecuteReaderでレコード取得 [VB.NET]

Visual Basic.NET ADO.NETデータベースプログラミング

1レコード取得

CommandオブジェクトのExecuteReaderメソッドに、CommandBehavior.SingleRowをパラメータに指定して、テーブルから1レコードを取得するVB.NETのサンプルプログラムです。

Command.ExecuteReader(CommandBehavior.SingleRow)

VB.NET(OleDb)版

入力した社員コードのデータを社員テーブルから取得して、その結果を表示するプログラムを作成します。

フォーム
コントロール プロパティ 設定値
TxtSyainCode - -
BtnSelect Text 検索
Panel1 BorderStyle Fixed3D
LblSyainSimei - -
LblSyainKana - -

取得レコードが1件の時は、ExecuteReaderメソッドの引数にCommandBehavior.SingleRowを指定すると、パフォーマンスの向上が期待できます。

ソースリストの枠内をクリックすると全選択できます。

Imports System.Data.OleDb

Public Class FormSelectOne
    Inherits System.Windows.Forms.Form

#Region " Windows フォーム デザイナで生成されたコード "
    ' 自動生成部分省略
#End Region

    '------------------------------------------------------------
    ' 検索ボタンクリック処理:社員テーブルから1レコード取得
    '------------------------------------------------------------
    Private Sub BtnSelect_Click(ByVal sender As System.Object, _
        ByVal e As System.EventArgs) Handles btnSelect.Click

        Dim con As New OleDbConnection()
        Dim cmd As New OleDbCommand()
        Dim dr As OleDbDataReader = Nothing

        ' 社員コード未入力はエラー
        If Me.TxtSyainCode.Text = "" Then
            MessageBox.Show("社員コードが未入力です", "エラー")
            Exit Sub
        End If

        Try
            ' DB接続文字列の設定
            ' プロジェクトフォルダ下のbinフォルダにsample.mdbを置く
            con.ConnectionString = _
            "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & _
            Application.StartupPath & "\sample.mdb"

            ' コネクションの設定
            cmd.Connection = con

            ' SQL文の設定
            cmd.CommandText = "SELECT 社員氏名, 社員カナ "
            cmd.CommandText &= "FROM 社員テーブル "
            cmd.CommandText &= "WHERE 社員コード = @code"

            ' DB接続を開く
            con.Open()

            ' SQL文パラメータの設定
            cmd.Parameters.Add("@code", OleDbType.Char, 5)
            cmd.Parameters("@code").Value = Me.TxtSyainCode.Text

            ' 社員テーブルから該当社員IDのレコード読込 
            ' 取得レコードが1件の時は、
            ' 引数にCommandBehavior.SingleRowを指定
            dr = cmd.ExecuteReader(CommandBehavior.SingleRow)
            If dr.Read() Then
                ' レコードが取得できた時の処理
                Me.LblSyainSimei.Text = Cstr(dr("社員氏名"))
                ' NULL値を許している項目は、NULL値の判定をする
                If IsDBNull(dr("社員カナ")) Then
                    Me.LblSyainKana.Text = ""
                Else
                    Me.LblSyainKana.Text = Cstr(dr("社員カナ"))
                End If
            Else
                ' レコードが取得できなかった時の処理
                MessageBox.Show _
                    ("この社員コードは未登録です", "エラー")
                Exit Sub
            End If

        Catch ex As Exception
            ' 例外が発生した時の処理
            MessageBox.Show(ex.ToString, "例外発生")

        Finally
            ' データリーダを閉じる
            If Not dr Is Nothing Then
                dr.Close()
            End If
            ' DB接続を閉じる
            If Not con Is Nothing Then
                con.Close()
            End If

        End Try

    End Sub

End Class