【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は全レコード検査する。
-----------------------------------------------------------------------
'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は全レコード検査する。
2013-06-08 11:17
nice!(0)
コメント(1)
トラックバック(0)
スーパーコピーブランド専門店
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)