すぐ使えるADO.NET

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

本の紹介

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

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




【第19号】

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

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

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

1. ADO.NET:テキストファイルの読み込み
2. VB.NETワンポイント:Fillメソッドの注意点

----------------------------------------------------------------------
            ■■ ADO.NET:テキストファイルの読み込み ■■

テキストファイルのデータを読み込んで、リストボックスに表示する例を紹介
します。

テキストファイルsyain.txtは、1行目が項目名、2行目以降がデータとして、
各項目がカンマで区切られています。具体的には、下記のように、1行目に
フィールド名が、2行目以降がデータとなっています。

"社員コード","社員氏名","社員カナ","部門コード"
"00001","青山太郎","アオヤマタロウ","101"
"00002","鈴木肇","スズキハジメ","101"
"00003","佐々木健一郎","ササキケンイチロウ","102"
"00005","田中和雄","タナカカズオ","101"
  :

まず、新規プロジェクトをひとつ作成します。Button1がボタンで、
ListBox1はリストボックスです。

┏━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃    Button1       ListBox1
┃ ┌――――┐ ┌―――――┐
┃ │ 読込 │ │     │
┃ └――――┘ │     │
┃        │     │
┃        │     │
┃        │     │
┃        └―――――┘
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━┛

JetOLEDBプロバイダを使用して、テキストファイルにアクセスします。接続文
字列は、エクセルファイルと似ていますが、違うところもありますので注意し
て下さい。

JetOLEDBプロバイダを使用しますので、今までと同様に、
Providerパラメータには、Microsoft.Jet.OLEDB.4.0を指定します。

  Provider=Microsoft.Jet.OLEDB.4.0;

Data Source パラメータには、テキストファイルのパスを指定します。
プロジェクトファイルホルダの下のbinホルダにsyain.txtを置けば、

  Data Source= d:¥…¥...¥bin¥;

Data Source= d:¥…¥...¥bin¥syain.txt; としませんので、注意して下さい。

d:¥…¥...¥binは、開発環境により異なりますので、実際には、
Application.StartupPath で取得します。

Extended Properties パラメータには、プロパティが3つあり、";"で区切って
指定します。

1番目は、データベースの種類で、テキストファイルには、Textを指定します。

2番目は、最初の行がヘッダー(フィールド名)か否かの指定で、最初の行が
ヘッダーの場合には、HDR=YES を指定します。HDR=NO の場合は、自動的に
フィールド名が付けられます。

3番目は、ファイルのフォマートの指定で、CSV形式のファイルの場合は、
FMT=Delimited を指定します。

CSVファイルから、社員コード、社員氏名、社員カナを取得するSELECT文
は、テーブル名の代わりに、ファイル名を指定します。

  "SELECT 社員コード, 社員氏名, 社員カナ FROM syain.txt"

リストボックスに社員氏名を表示するために、DisplayMemberプロパティに
"社員氏名"を設定します。

  Me.ListBox1.DisplayMember = "社員氏名"

そして、DataSourceプロパティに、データセットのTablesプロパティ(DataSet
に格納されているテーブルのコレクション)の先頭項目を文字列に変換して設
定します。

 Me.ListBox1.DataSource = oDataSet.Tables(oDataSet.Tables(0).ToString)

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

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

Imports System.Data.OleDb

Public Class Form1
  Inherits System.Windows.Forms.Form

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

  Private Sub Button1_Click _
  (ByVal sender As System.Object, ByVal e As System.EventArgs) _
  Handles Button1.Click

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

    Try
      'DB接続文字列の設定
      'プロジェクトファイルホルダの下にあるbinホルダにCSVファイルを置く
      oConn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" + _
      "Data Source=" + Application.StartupPath + "¥;" + _
      "Extended Properties=""Text;HDR=YES;FMT=Delimited"""

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

      'SQL文の設定
      oCommand.CommandText = _
      "SELECT 社員コード, 社員氏名, 社員カナ FROM syain.txt"

      'データを取得する
      oDataAdapter.SelectCommand = oCommand
      oDataSet.Clear()
      oDataAdapter.Fill(oDataSet)

      'リストボックスに社員氏名を表示できるように設定する
      Me.ListBox1.DisplayMember = "社員氏名"

      'リストボックスにsyain.txtのデータを連結する
      Me.ListBox1.DataSource = _
           oDataSet.Tables(oDataSet.Tables(0).ToString)

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

    End Try

  End Sub

End Class

----------------------------------------------------------------------
          ■■ VB.NETワンポイント:Fillメソッドの注意点 ■■

Fillメソッドを使う時は、不要なレコードは読み込まないようにします。大量
のデータを取り込むと、メモリやネットワークに負担がかかりますし、データ
処理時間が長くなります。

たとえば、SQL文を

 "SELECT * FROM syain.txt" としたり、
 "SELECT 社員コード, 社員氏名, 社員カナ FROM 社員テーブル"

として、Fillメソッドを使うと、社員テーブルの全レコードをデータセットに
取り込むことになります。レコード数が非常に多い場合は、SQL文でWHERE句を
使うなどして、必要最小限のレコードを取り込むようにします。

 "SELECT * FROM yubinBango.txt WHERE 市区町村名 = ""中央区"""

とすれば、WHERE句を使って、選択したの行のみ取得できます。キー値で絞り
込めば、抽出レコードは1件になります。

  "SELECT * FROM 社員テーブル WHERE 社員コード = @syainCode"

とすれば、@syainCodeには、テキストボックスの入力値を使うこともできます。

また、全項目が必要な時以外は、*を使わず、

  "SELECT 社員コード, 社員氏名, 社員カナ FROM syain.txt"

として、必要項目のみ取得するようにします。

----------------------------------------------------------------------
            ■■ 次号予告 第20号(新年1月12日発行予定) ■■

いつも「VB.NET データベースプログラミング奮闘記」をご購読くださり、
ありがとうございます。今年最後の発行となりました。

来年は、Visual Basic 2005も登場します。このメールマガジンでも新機能や
拡張された言語仕様について、紹介いていくつもりですので、今後とも
「VB.NET データベースプログラミング奮闘記」をよろしくお願い申し上げます。

Visual Studio 2005 日本語ベータ1版の入手方法については、次のホーム
ページに掲載されています。
 http://www.microsoft.com/japan/msdn/vstudio/2005/beta/

それでは、皆様どうぞ良いお年をお迎えください。

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