2017-12-11 48 views
0

注:今後他の人を助けるために私自身の問題に答える。Schema.iniファイルを使用したCSVファイルの日付の列がありません


私はCSVがのOleDBでファイルを読んでいる:

DataTable csvTableSchema = new DataTable(); 

//Open the CSV 
string csvFilePath = "C:\\temp\\WithDateColumn.csv"; 
var connString = string.Format(
    @"Provider=Microsoft.Jet.OleDb.4.0; Data Source={0};Extended Properties=""Text;HDR=YES;FMT=Delimited""", 
    Path.GetDirectoryName(csvFilePath) 
); 

//To read the csv with DataTypes we specify the columns and their datatypes in the Schema.ini 
//REF https://docs.microsoft.com/en-us/sql/odbc/microsoft/schema-ini-file-text-file-driver 

using (var conn = new OleDbConnection(connString)) 
{ 
    conn.Open(); 
    var query = "SELECT * FROM [" + Path.GetFileName(csvFilePath) + "]"; 
    using (var adapter = new OleDbDataAdapter(query, conn)) 
    { 
     var ds = new DataSet("CSV File"); 
     adapter.Fill(ds); 
     csvTableSchema = ds.Tables[0]; 
    } 
} 

これは、CSVファイルがどのように見えるかをされています

enter image description here

ここでスキーマのサンプルです.ini

[ABC_20171128.csv] 
Format = Delimited(|) 
CharacterSet=ANSI 
ColNameHeader=True 
DateTimeFormat=dd MM yyyy hh:mm:ss 

Col1 = Date DateTime 
Col2 = AccountID Text 
Col3 = SubAccount Text 
Col4 = MarketCode Text 
Col5 = SecurityCode Text 
Col6 = Units Single 

私が試した異なるsyntaxs:

DateTimeFormat = DD MMのYYYYのHH:MM:

System.Data.OleDb.OleDbException:ssは

はウィットにこの例外を失敗します: 'テキストファイル指定' WithDateColumn.csv 'では、DateTimeFormatオプションが無効です。'

DateTimeFormat = DD MM YYYYは

この構文エラーが、日付列が空ではありません。

Schema.iniファイルを使用してCSVからDateTimesを読み取るにはどうすればよいですか?

答えて

3

はOLEDBは代わりに、日付時刻における分間ミリメートルのNNを使用してオンにします。

だから正しい構文は次のとおりです。

DateTimeFormat = DD MMのYYYYのHH:NN:SSインターネットに隠し

参考:http://forums.codeguru.com/showthread.php?333106-schema-ini-DateTimeFormat-legal-values

私はこれを見ることができませんでした公式文書:https://docs.microsoft.com/en-us/sql/odbc/microsoft/schema-ini-file-text-file-driver

関連する問題