すぐ使えるADO.NET

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

本の紹介

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

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




【第16号】

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

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

すぐ使えるADO.NET --> サンプルプログラム満載
                      http://park5.wakwak.com/‾weblab/
======================================================================
                        -----【目次】-----

1. VB.NETワンポイント:TypeOf … Is演算子
2. ADO.NET:Excelファイルの追加処理と更新処理

----------------------------------------------------------------------
          ■■ VB.NETワンポイント:TypeOf … Is演算子 ■■

今回は、TypeOf … Is演算子を紹介します。この演算子は、オブジェクトが
特定の型、または特定の型を継承している場合には、Trueを返し、そうでなけ
れば、Falseを返します。

TextBoxクラスは、System.Objectを基底クラスとして、次のように派生してい
ます。

System.Object
 └―System.MarshalByRefObject
      └―System.ComponentModel.Component
           └―System.Windows.Forms.Control
                  └―System.Windows.Forms.TextBoxBase
                        └―System.Windows.Forms.TextBox

したがって、次の例では、TypeOf … Is演算子は、すべてTrueを返し、
メッセージボックスが3度表示されます。

    Dim TextBox1 As New TextBox()

    If TypeOf TextBox1 Is Object Then
        MessageBox.Show("TextBox1はObject型から派生しています")
    End If
    If TypeOf TextBox1 Is Control Then
        MessageBox.Show("TextBox1はControl型から派生しています")
    End If
    If TypeOf TextBox1 Is TextBox Then
        MessageBox.Show("TextBox1はTextBox型です")
    End If

----------------------------------------------------------------------
         ■■ ADO.NET:Excelファイルの追加処理と更新処理 ■■

前号と同じ下記Excelシート(シート名は、デフォルトの"Sheet1")を使い、
行の追加、更新を行う方法を紹介します。

       A          B           C         D
----------------------------------------------------------------
 1  郵便番号  都道府県名  市区町村名  町域名
 2  100-0102  東京都      大島大島町  岡田
 3  100-0211  東京都      大島大島町  差木地
 4  100-0103  東京都      大島大島町  泉津
 :
 n  104-0061  東京都      中央区      銀座
 :

なお、Jet OLE DBプロバイダでは、行削除はできません。DELETE操作を実行す
ると、例外が発生します。削除の仕方については、次号で論理的な削除方法を
紹介します。

接続文字列は、前号で説明したExcelシートの読み込みとまったく同じです。

1行追加で使用するSQL文は、次のようになります。
"INSERT INTO [Sheet1$](郵便番号, 都道府県名, 市区町村名, 町域名) " + _
"VALUES(@yubinBango, @todofuken, @shikuchoson, @choiki)"

テーブル名には、[Sheet1$]のように、シート名の後にドル記号を付加して指
定します。パラメータの@yubinBango、@todofuken、@shikuchoson、@choikiに
は、追加するフィールド値をセットします。そのために、SQL文の出現順に、
コマンドオブジェクトのParametersコレクションに、パラメータを追加します。
そして、そのValueプロパティにフィールド値を設定します。

    oCommand.Parameters.Add( _
        New OleDbParameter("@yubinBango", OleDbType.Char, 8))
    oCommand.Parameters("@yubinBango").Value = "999-9999"
    ........(中略)........
    oCommand.Parameters.Add( _
        New OleDbParameter("@choiki", OleDbType.Char, 50))
    oCommand.Parameters("@choiki").Value = "エクセル町"

レコードを追加処理は、コマンドオブジェクトのExecuteNonQueryメソッドを
呼び出して行います。メソッドの戻り値は、追加したレコード数です。

    Dim count As Integer = oCommand.ExecuteNonQuery()

更新処理も、追加処理と同様です。

更新で使用するSQL文は、次のようになります。
"UPDATE [Sheet1$] SET 市区町村名=@shikuchoson, 町域名=@choiki " + _
"WHERE 郵便番号=@yubinBango"

@shikuchoson、@choikiに、更新するフィールド値を、@yubinBangoに更新行の
郵便番号をセットして、ExecuteNonQueryメソッドで、更新処理を行います。

それでは、ソースリストを掲載します。

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

'---------- Excelシートに1行追加する ----------
'注:郵便番号の重複チェックはしていません
Private Sub addRow()

  Dim oConn As New OleDbConnection()
  Dim oCommand As New OleDbCommand()
  Dim oDataAdapter As New OleDbDataAdapter()
  Dim oDataSet As DataSet = New DataSet()
  Dim yubinBangoList As New DataTable()

  Try
    'DB接続文字列の設定
    'プロジェクトファイルホルダの下のbinホルダにExcelファイルを置く
    oConn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0; " + _
    "Data Source=" + Application.StartupPath + "¥郵便番号簿.xls;" + _
    "Extended Properties=""Excel 8.0;HDR=YES;"""

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

    'SQL文の設定
    '注:シート名は、デフォルトの"Sheet1"のまま使っています
    oCommand.CommandText = "INSERT INTO [Sheet1$]" + _
    "(郵便番号, 都道府県名, 市区町村名, 町域名) " + _
    "VALUES(@yubinBango, @todofuken, @shikuchoson, @choiki)"

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

    'INSERTコマンドの設定
    oDataAdapter.InsertCommand = oCommand

    'SQL文パラメータの設定(SQL文の出現順に設定)
    oCommand.Parameters.Add( _
        New OleDbParameter("@yubinBango", OleDbType.Char, 8))
    oCommand.Parameters("@yubinBango").Value = "999-9999"

    oCommand.Parameters.Add( _
        New OleDbParameter("@todofuken", OleDbType.Char, 8))
    oCommand.Parameters("@todofuken").Value = "追加県"

    oCommand.Parameters.Add( _
        New OleDbParameter("@shikuchoson", OleDbType.Char, 50))
    oCommand.Parameters("@shikuchoson").Value = "テスト市"

    oCommand.Parameters.Add( _
        New OleDbParameter("@choiki", OleDbType.Char, 50))
    oCommand.Parameters("@choiki").Value = "エクセル町"

    'Excelブック挿入処理実行
    Dim count As Integer = oCommand.ExecuteNonQuery()

    '追加レコード数のチェック
    If count <> 1 Then
      MessageBox.Show("追加処理が失敗しました", "エラー")
    End If

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

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

End Sub

'---------- Excelシートの1行を更新する ----------
Private Sub updateRow()

  Dim oConn As New OleDbConnection()
  Dim oCommand As New OleDbCommand()
  Dim oDataAdapter As New OleDbDataAdapter()
  Dim oDataSet As DataSet = New DataSet()
  Dim yubinBangoList As New DataTable()

  Try
    'DB接続文字列の設定
    'プロジェクトファイルホルダの下のbinホルダにExcelファイルを置く
    oConn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0; " + _
    "Data Source=" + Application.StartupPath + "¥郵便番号簿.xls;" + _
    "Extended Properties=""Excel 8.0;HDR=YES;"""

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

    'SQL文の設定
    oCommand.CommandText = "UPDATE [Sheet1$] " + _
    "SET 市区町村名=@shikuchoson, 町域名=@choiki " + _
    "WHERE 郵便番号=@yubinBango"

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

    'UPDATEコマンドの設定
    oDataAdapter.UpdateCommand = oCommand

    'SQL文パラメータの設定(SQL文の出現順に設定)
    oCommand.Parameters.Add( _
        New OleDbParameter("@shikuchoson", OleDbType.Char, 50))
    oCommand.Parameters("@shikuchoson").Value = "@@@市"
    oCommand.Parameters.Add( _
        New OleDbParameter("@choiki", OleDbType.Char, 50))
    oCommand.Parameters("@choiki").Value = "###"
    oCommand.Parameters.Add( _
        New OleDbParameter("@yubinBango", OleDbType.Char, 8))
    oCommand.Parameters("@yubinBango").Value = "999-9999"

    'Excelブック更新処理実行
    Dim count As Integer
    count = oCommand.ExecuteNonQuery()

    '更新レコード数のチェック
    If count = 0 Then
      MessageBox.Show("郵便番号簿の更新が失敗しました", "エラー")
    End If

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

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

End Sub

----------------------------------------------------------------------
            ■■ 次号予告 第17号(11月6日頃発行予定) ■■

1. VB.NETワンポイント
2. ADO.NET:Excelファイルの論理的な削除処理

======================================================================
VB.NET データベースプログラミング奮闘記    第16号(2004.10.18)
          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.