ADO.NETでCSVファイルを読込む [VB.NET]

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

DataAdapterオブジェクトのFillメソッドで読み込み

DataAdapterオブジェクトのFillメソッドを使って、CSV(カンマ区切りテキスト)ファイルの全行を読み込み、リストボックスに表示するプログラムを作成します。

csvファイル表示
コントロール プロパティ 設定値
ListBox1 - -
BtnYomikomi Text 読込

Textファイル(ファイル名:syain.csv)のデータは、CSV形式で各データをカンマで区切っています。1行目は列タイトル行で、2行目以降がデータになっています。

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

CSVファイル 接続文字列

Provider引数は、Microsoft.Jet.OLEDB.4.0を指定

Data Source引数は、Textファイルのパスを指定。開発環境により異なるので、Application.StartupPathで取得

Extended Properties 引数にはプロパティが3つあり、";"で区切って指定

  • 1番目:データベースの種類で、テキストファイルの場合には、Textを指定
  • 2番目:最初の行がヘッダー(フィールド名)か否かの指定で、最初の行がヘッダーの場合には、HDR=YES、HDR=NO の場合は、自動的にフィールド名が付けられる
  • 3番目:ファイルのフォマート指定で、CSV形式なら FMT=Delimitedを指定

【注意】文字列として " をコーディングするときは、 "" (2個連続)で記述

サンプルプログラム

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

Imports System.Data.OleDb
 Public Class FormCsvTextFile
    Inherits System.Windows.Forms.Form
 #Region " Windows フォーム デザイナで生成されたコード "
    ' 自動生成部分省略
#End Region
     '--------------------------------------------------------------
    ' 読込ボタン押下処理
    ' CSVファイルを読込み、氏名をリストボックスに表示
    '--------------------------------------------------------------
    Private Sub BtnYomikomi_Click(ByVal sender As System.Object, _
    ByVal e As System.EventArgs) Handles BtnYomikomi.Click
       Dim con As New OleDbConnection()
      Dim cmd As New OleDbCommand()
      Dim ds As New DataSet()
      Dim da As New OleDbDataAdapter()
       Try
          ' DB接続文字列の設定
          ' プロジェクトフォルダ下のbinフォルダにcsvファイルを置く
          con.ConnectionString = _
              "Provider=Microsoft.Jet.OLEDB.4.0;" & _
              "Data Source=" & Application.StartupPath & "\;" & _
              "Extended Properties=""Text;HDR=YES;FMT=Delimited"""
           ' コネクションの設定
          cmd.Connection = con
           ' テキストファイルを読み込むSQL文の設定
          cmd.CommandText = _
              "SELECT 社員コード, 社員氏名, 社員カナ FROM syain.csv"
           ' データを取得する 
          da.SelectCommand = cmd
          ds.Clear()
          da.Fill(ds)
           ' リストボックスに社員氏名を表示できるように設定する
          Me.ListBox1.DisplayMember = "社員氏名"
           ' 社員氏名に対応した社員コードを取得できるように設定する
          Me.ListBox1.ValueMember = "社員コード"
           ' リストボックスにsyain.txtのデータを連結する
          Me.ListBox1.DataSource = ds.Tables(ds.Tables(0).ToString)
       Catch ex As Exception
          ' 例外が発生した時の処理
          MessageBox.Show(ex.Message, "例外発生")
       End Try
     End Sub
 End Class