SSブログ

【VB.NET】ODBC ProviderでCSVを取り込むときにはschema.iniが必要な件 [Computer]

先日、VB.NETで、CSVからDataGridViewへデータを読みこむのにファイル開いて~、1行読んで~、ループして~とかやるのは面倒くさいと思い、もっと楽な方法がないか調べてると、ADOやODBCでやるとサクっといくことがわかった。ソースは以下の通りでシンプル。

-----------------------------------------------------------------------
'CSVファイルのあるフォルダ
Dim csvDir As String = "C:\"
'CSVファイルの名前
Dim csvFileName As String = "hoge.csv"

'接続文字列
Dim conString As String = _
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" _
+ csvDir + ";Extended Properties=""text;HDR=No;FMT=Delimited"""
Dim con As New System.Data.OleDb.OleDbConnection(conString)

Dim commText As String = "SELECT * FROM [" + csvFileName + "]"
Dim da As New System.Data.OleDb.OleDbDataAdapter(commText, con)

'DataTableに格納する
Dim dt As New DataTable
da.Fill(dt)
-----------------------------------------------------------------------

簡単にできたと思ったら、問題が1つ。
HH:MM というデータが、DataGridViewで表示させると、'1899/12/30 HH:MM:00'となってしまう。DataSouceの枠をStringで定義してないからダメなんだと思い、設定してみたが、状況は変わらず。
デバッグを進めていると、どうもODBCが勝手にデータの数件を見て、テーブルをレイアウトしてるっぽいということに行きついた。問題の列はDate型にされてしまっていると思われる。
それを防ぐには、CSVファイルと同じフォルダにschema.iniというiniファイルを置いて、中でテーブルのカラム定義をしてやる必要があるようだ。

---- schema.ini -------------------------------------------------
[hoge.csv]
ColNameHeader=True
Format=Delimited()
MaxScanRows=0
CharacterSet=OEM
Col1=columnname1 char width 50
Col2=columnname2 Date width 9
Col3=columnname3 integer
:
-----------------------------------------------------------------------

Section名は、csvのファイル名。ColNameHeaderは、1行目をデータとせずカラム名とするかどうか。Formatは区切り文字、ファイル形式。MaxScanRowsは先頭から何レコード目までに格納されているレコードを検査するか。0は全レコード検査する。





nice!(0)  コメント(1)  トラックバック(0) 

nice! 0

コメント 1

Scottagowl

スーパーコピーブランド専門店
https://www.007kopi.com/product/13831.html

ルイヴィトン、シャネル、エルメス、ルチェ&ガッバ―ナ、
バレンシアガ、ボッテガ ヴェネタ、ミュウミュウ、クリスチャンディオール
その他の偽物バッグコピー、偽物財布コピー、偽物時計コピー、偽物ベルトコピー、偽物指輪コピー、偽物キーケース、商品は全く写真の通りです。
高級腕時計(N級品),スーパーコピー時計(N級品),財布(N級品)バッグ(N級品),靴(N品),指輪(N級品),ベルト(N級品),マフラー (N級品)
人気の売れ筋商品を多数取り揃えております。
全て激安特価でご提供.お願いします.
★100%品質保証!満足保障!リピーター率100%!
★商品数も大幅に増え、品質も大自信です。
★スタイルが多い、品質がよい、価格が低い!
★顧客は至上 誠実 信用。
★歓迎光臨
★送料無料(日本全国)
ホームページ上でのご注文は24時間受け付けております
https://www.007kopi.com/product/12743.html

by Scottagowl (2019-09-25 12:14) 

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

2013-06-02スマートHEMS ブログトップ

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。