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

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

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

CommandオブジェクトのExecuteReaderメソッドと、DataReaderオブジェクトのReadメソッドを使って、テーブルから全レコードを取得するサンプルプログラム。

Command.ExecuteReader

MDB版:サンプルプログラム

あらかじめ、OleDbCommand.ExecuteScalarメソッドで、社員テーブル表の全レコード数を求め、レコード数分のsyain配列要素を確保します。

そして、OleDbCommand.ExecuteReaderメソッドを実行して、全レコードデータをsyain配列に取得します。

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

Imports System.Data.OleDb

' 社員テーブル構造体
Public Structure structSyain
    Public syainCode As String           ' 社員コード
    Public syainSimei As String          ' 社員氏名
    Public syainKana As String           ' 社員カナ名
    Public bumonCode As String           ' 部門コード
    Public nyusyaBi As DateTime          ' 入社年月日
    Public kosin As DateTime             ' 更新日時
End Structure

Public Class FormSelectAll
  Inherits System.Windows.Forms.Form

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

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

      ' 全レコードを取得してコンソールに出力
      Dim syain() As structSyain = Nothing
      Dim rec As String = ""
      Dim i As Integer = 0
      Dim count As Integer = 0

      ' 社員テーブル全レコードの列値取得
      Try
          count = GetSyainAll(syain)
          If count > 0 Then
              ' 取得レコードの確認
              For i = 0 To syain.Length - 1
                rec = (i + 1).ToString + "件目==>"
                rec += " 社員コード:" + syain(i).syainCode
                rec += ", 社員氏名:" + syain(i).syainSimei
                rec += ", 社員カナ:" + syain(i).syainKana
                rec += ", 部門コード:" + syain(i).bumonCode
                rec += vbCrLf + Space(9)
                rec += "入社日:" + CStr(syain(i).nyusyaBi)
                rec += ", 更新日時:" + CStr(syain(i).kosin)
                Trace.WriteLine(rec)
              Next
          Else
              ' レコードが取得できなかった時の処理
              MessageBox.Show("レコードがありません", "エラー")
          End If

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

      End Try

  End Sub

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

      Dim con As New OleDbConnection()
      Dim cmd As New OleDbCommand()

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

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

          ' DB接続
          con.Open()

          ' 社員テーブルの全レコード数を取得するSQL文
          cmd.CommandText = _
              "SELECT COUNT(*) FROM 社員テーブル"

          ' 社員テーブルのレコード数取得
          Dim count As Integer = CInt(cmd.ExecuteScalar)

          ' レコード有無チェック(0件検査)
          If Count > 0 Then
              '------<< レコードが取得できた時の処理 >>------
              ' syainのサイズを社員テーブルのレコード数に変更 
              ReDim Preserve syain(count - 1)

              ' 全レコードを取得するSQL文
              cmd.CommandText = _
                  "SELECT * FROM 社員テーブル ORDER BY 社員コード"

              ' 社員テーブルからレコード読込 
              Dim dr As OleDbDataReader
              dr = cmd.ExecuteReader()
              Try
                  Dim i As Integer = -1
                  While dr.Read()
                      i = i + 1
                      syain(i).syainCode = CStr(dr("社員コード"))
                      syain(i).syainSimei = CStr(dr("社員氏名"))
                      ' 社員カナのNULL値判定
                      If IsDBNull(dr("社員カナ")) Then
                          syain(i).syainKana = ""
                      Else
                          syain(i).syainKana = CStr(dr("社員カナ"))
                      End If
                      syain(i).bumonCode = CStr(dr("部門コード"))
                      syain(i).nyusyaBi = CDate(dr("入社年月日"))
                      syain(i).kosin = CDate(dr("更新日時"))
                  End While

              Catch ex As Exception
                  ' 例外が発生した時の処理
                  Throw New Exception(ex.ToString)
              Finally
                  ' データリーダクローズ
                  If Not dr Is Nothing Then
                      dr.Close()
                  End If
             End Try
          End If

          Return count    ' ◆リターン

      Catch ex As Exception
          ' 例外が発生した時の処理
          Throw New Exception(ex.ToString)
      Finally
          ' DBクローズ
          If Not con Is Nothing Then
              con.Close()
          End If
      End Try

  End Function

End Class