DataAdapter.Fill 改良版 [VB.NET]

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

テーブルの全レコード取得

DataAdapter. Fillメソッドを使って全レコードを取得するサンプルプログラムに、Const クラスを追加して可読性を少し良くしました。

Command.ExecuteReaderメソッドで全レコードを取得するサンプルはこちら

MDB版 サンプルプログラム

syain.Rows(i).Item(0)の添え字0を、syainList.Rows(i).Item(Items.SYAINCODE)のように、名前付き定数に変更して、プログラムの可読性を改善しました。

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

Imports System.Data.OleDb

'----- 追加クラス -----
Public Class Items
    Public Const SYAINCODE As Integer = 0
    Public Const SYAINSIMEI As Integer = 1
    Public Const SYAINKANA As Integer = 2
    Public Const BUMONCODE As Integer = 3
    Public Const NYUSYABI As Integer = 4
    Public Const KOSINBI As Integer = 5
End Class

Public Class FormSelectAll2Kairyo
    Inherits System.Windows.Forms.Form

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

    '------------------------------------------------------------
    ' フォームロード処理
    '------------------------------------------------------------
    Private Sub FormSelectAll2Kairyo_Load _
        (ByVal sender As System.Object, _
        ByVal e As System.EventArgs) Handles MyBase.Load

        ' 全レコードを取得してコンソールに出力
        Dim syain As DataTable = New DataTable()
        Dim msg As String = ""
        Dim strOut As String = ""
        Dim i As Integer = 0

        ' 社員テーブル全レコードの全フィールド値取得
        msg = getSyainAll(syain)

        If msg = "" Then
          ' 取得レコードの確認
          For i = 0 To syain.Rows.Count - 1
            strOut = (i + 1).ToString + "件目==>"
            strOut += "社員コード:"
            strOut += CStr(syain.Rows(i).Item(Items.SYAINCODE))
            strOut += ", 氏名:"
            strOut += CStr(syain.Rows(i).Item(Items.SYAINSIMEI))
            If IsDBNull(syain.Rows(i).Item(Items.SYAINKANA)) Then
              strOut += ", カナ:Null"
            Else
              strOut += ", カナ:"
              strOut += CStr(syain.Rows(i).Item(Items.SYAINKANA))
            End If
            strOut += ", 部門コード:"
            strOut += CStr(syain.Rows(i).Item(Items.BUMONCODE))
            strOut += vbCrLf + Space(9)
            strOut += " 入社年月日:"
            strOut += CStr(syain.Rows(i).Item(Items.NYUSYABI))
            strOut += ", 更新日時:"
            strOut += CStr(syain.Rows(i).Item(Items.KOSINBI))
            Trace.WriteLine(strOut)
          Next
        Else
          ' レコードが取得できなかった時の処理
          MessageBox.Show(msg, "\sample.mdb""エラー")
        End If

    End Sub

    '------------------------------------------------------------
    ' 社員テーブルから全レコードを取得
    '------------------------------------------------------------
    Private Function _
        getSyainAll(ByRef syain As DataTable) As String

        Const SELECT_SYAIN As String = _
        "SELECT * FROM 社員テーブル ORDER BY 社員コード"
        Dim con As New OleDbConnection()
        Dim cmd As New OleDbCommand()
        Dim da As New OleDbDataAdapter()
        Dim ds As DataSet = New DataSet()

        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_SYAIN

            ' データを取得する 
            da.SelectCommand = cmd
            da.Fill(syain)

            ' 取得レコード数のチェック
            If syain.Rows.Count = 0 Then
                ' レコードがなかった時の処理
                Return "社員テーブルにレコードがありません"
            Else
                Return ""
            End If

        Catch ex As Exception
            ' 例外が発生した時の処理
            Return ex.ToString

        End Try

    End Function

End Class