すぐ使えるADO.NET

【Visual BasicによるADO.NETデータベースプログラミング】

本の紹介

バックナンバー:VB.NETデータベースプログラミング

ADO.NETの基本的なプログラミングを中心に、すぐ使えるサンプルプログラム満載です。




【第2号】

 第2号(2004.4.1発行)
====================================================================
         ★★ VB.NETデータベースプログラミング奮闘記 ★★

--------------------------------------------------------------------
ADO.NETの基本的なプログラミングを中心に掲載します。
末永くご購読の程よろしくお願い申し上げます。

すぐ使えるADO.NETの研究 --> サンプルプログラム満載
                            http://park5.wakwak.com/‾weblab/
====================================================================
               -----【目次】-----
1. VB.NETワンポイント:配列サイズの動的変更
2. 社員テーブルから全レコードを取得する−その1−(2)
3. VB.NETワンポイントオブジェクト指向:インスタンスの生成
4. 次号予告

--------------------------------------------------------------------
        ■■ VB.NETワンポイント:配列サイズの動的変更 ■■

Preserveキーワードを指定することによって、既に配列に格納されている値
を保持したまま、配列を拡張することができます。

Dim array() As String = {"Sun", "Mon", "Tue"}

と初期化して宣言すると、
  array(0) は "Sun"
  array(1) は "Mon"
  array(2) は "Tue" となります。

この配列の値をそのまま保持したまま、さらに要素を2個増やすためには、

ReDim Preserve array(4) とします。

Preserve指定により、新配列は既存配列の要素をコピーしてから拡張されま
す。したがって、
  array(0) は "Sun"
  array(1) は "Mon"
  array(2) は "Tue" のままで、
  array(3) は ""
  array(4) は ""    となります。

配列要素を1個ずつ増やして行く場合を考えてみます。

Dim array() As String     '配列の参照のみ宣言
ReDim Preserve array(0)   '配列の要素をひとつ確保
array(0) = "AAA"          '1番目の要素に値を設定
ReDim Preserve array(1)   '1番目の要素を保持したまま要素を1個拡張
array(1) = "BBB"          '2番目の要素に値を設定

以下同様にして、順次1個ずつ配列の要素を拡張します。プログラミング時
には設定する要素がなくなるまでループさせれば良いでしょう。下記プログ
ラムソースリストにWhileを使ったコーディング例がありますので参考にし
て下さい。

【代入演算子:^=】
前号で、代入演算子で+=, -=, *=, /=, ¥=, &=を説明しましたが、
ひとつ ^= の説明が漏れていました。大変失礼致しました。

Dim s As Single = 2 として、
s ^= 4  --> s = s ^ 4  と同じで、実行結果は、s = 16 となります。

--------------------------------------------------------------------
    ■■ 社員テーブルから全レコードを取得する−その1−(2) ■■

今回は社員テーブルの全レコードを取得する関数getSyainAllの内容につい
て説明します。関数の仕様は次のとおりです。

名      称:Private Function getSyainAll
機      能:社員テーブルから全レコードの全項目を取得する
パラメータ:参照渡し、社員テーブル構造体の配列
            この構造体配列に社員テーブルの全レコードを格納する
リターン値:長さ0の文字列ならば、全レコードの取得成功、
            そうでなければ、レコードの取得失敗

--【プログラムソースリスト】----------------------------------------

  Private Function getSyainAll(ByRef syainInfo() As structSyain) _
                                                        As String

    'データベース接続オブジェクトのインスタンスを生成
    '注:MDBの場合                         SQL Server の場合
    Dim oConn As New OleDbConnection()   'As New SqlConnection()

    'コマンドオブジェクトのインスタンスを生成
    Dim oCommand As New OleDbCommand()   'As New SqlCommand()

    'データリーダオブジェクトの宣言
    Dim oDataReader As OleDbDataReader   'As SqlDataReader()

    '配列を拡張するためのインデックスを宣言
    Dim i As Integer

    Try
      'ConnectionStringプロパティにDB接続文字列を設定
      'sample.mdbをプロジェクトファイルホルダの下のbinホルダに置く
      oConn.ConnectionString = _
      "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + _
      Application.StartupPath + "¥sample.mdb"

      'コネクションの設定
      oCommand.Connection = oConn

      'SQL文の設定
      oCommand.CommandText = "SELECT * FROM 社員テーブル"

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

      'コマンドのExecuteReaderメソッドを呼び出し、
      'データリーダに結果を設定する
      '(社員テーブルの全レコードの全フィールドを取得する)
      oDataReader = oCommand.ExecuteReader()

      '配列を拡張するためのインデックスの初期値を設定する
      i = -1

      'データリーダのReadメソッドを呼び出し、1レコード毎に処理する
      'Readメソッドは次にレコードが存在する場合にはTrueを、そうでな
      'い場合はFalseを返すので、Falseになるまで、WhileループでRead
      'メソッドを呼び出す

      While oDataReader.Read()
        '---------- レコードが取得できた時の処理 ----------
        '配列をひとつ拡張するため、配列インデックスを+1する
        i = i + 1

        'Preserve指定により、新配列は既存配列の要素をコピーしてから
        '配列の要素をひとつ拡張する(syainInfo(0)から開始する)
        ReDim Preserve syainInfo(i)

        'レコードの全フィールドを社員構造体配列に設定する
        syainInfo(i).syainCode = oDataReader("社員コード")
        syainInfo(i).syainSimei = oDataReader("社員氏名")

        'NULL値を許している社員カナフィールドは、NULL値の判定をする
        If IsDBNull(oDataReader("社員カナ")) Then
          syainInfo(i).syainKana = ""
        Else
          syainInfo(i).syainKana = oDataReader("社員カナ")
        End If

        syainInfo(i).bumonCode = oDataReader("部門コード")
        syainInfo(i).nyusyaNengappi = oDataReader("入社年月日")
        syainInfo(i).kosinNitizi = oDataReader("更新日時")
      End While

      '取得レコード数をチェックする
      If syainInfo Is Nothing Then
        'レコードがなかった時のエラー処理
         Return "社員テーブルにレコードがありません"
      Else
        'レコードが存在した時の正常処理
         Return ""
      End If

    Catch oExcept As Exception
      'Catch oExcept As Exception と例外オブジェクトを宣言すれば、
      '全ての例外が捕捉され、Catchブロックが実行される

      '例外発生時の文字列をリターン値に設定する
       Return oExcept.ToString

    Finally
      '読み込み処理が終了したら、データリーダとテーブル接続を閉じる
      'Finallyブロックは必ず実行されるので確実に閉じることができる

      'データリーダを閉じる
      If Not oDataReader Is Nothing Then
        oDataReader.Close()
      End If

      'DB接続を閉じる
      If Not oConn Is Nothing Then
        oConn.Close()
      End If

    End Try

  End Function

--【補足】DB接続文字列の設定(SQL Serverの例)------------------------

 oConn.ConnectionString = _
 "data source=サーバ名;initial catalog=データベース名;" + _
 "integrated security=SSPI;persist security info=True;" + _
 "user id=sa;password=@@@@@;workstation id=サーバ名;packet size=4096"

--------------------------------------------------------------------
■■ VB.NETワンポイントオブジェクト指向:参照比較演算子 Is  ■■

Is 演算子は、2つのオブジェクトの参照が同一オブジェクトを参照している
か否かを判定する演算子です。

  If  obj1 Is obj2 Then
    'どちらも同じオブジェクトを参照しているときは、真(True)を返す
    MsgBox("obj1とobj2は同じオブジェクトを参照しています")
  else
    '別のオブジェクトを参照しているので、偽(False)を返す
    MsgBox("obj1とobj2は異なるオブジェクトを参照しています")
  End If

オブジェクトが何も参照していないかを判定する時は、Nothingを使います。

  If obj Is Nothing Then
    MsgBox("objは何も参照していません")
  End If

--------------------------------------------------------------------
       ■■ 次号予告第3号(2号発行日から10日以内を予定) ■■

 1. VB.NETワンポイント
 2. テーブル設計:将来変更されるかもしれない項目を扱う場合について
 3. VB.NETワンポイントオブジェクト指向

====================================================================
VB.NET データベースプログラミング奮闘記    第2号(2004.4.1)
          http://park5.wakwak.com/‾weblab/
--------------------------------------------------------------------
このメールマガジン(マガジンID: 0000128094)は、
インターネットの本屋さん『まぐまぐ』から配信されています。
  http://www.mag2.com/

【購読中止の方法】購読の中止は次のホームページからお願い致します。
  http://park5.wakwak.com/‾weblab/
  http://www.mag2.com/m/0000128094.htm
--------------------------------------------------------------------
このメールマガジン及び、すぐ使えるADO.NETの研究ホームページで公開し
ているソースプログラム・データの利用により生じた損害等について発行者
は一切責任を負いません。
ソースプログラムの再利用は自由ですが、著作権は発行者が所有します。
このメールマガジン及び、すぐ使えるADO.NETの研究ホームページに掲載さ
れている会社名・製品名等は各社の登録商標または商標です。
====================================================================

Copyright© すぐ使えるADO.NET. All rights reserved.