Jer*_*son 1 csv oledb schema datetime
注意:回答我自己的问题以帮助将来帮助他人。
我正在使用 OleDB 读取 CSV 文件:
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];
}
}
Run Code Online (Sandbox Code Playgroud)
这是 CSV 文件的样子:
这是 schema.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
Run Code Online (Sandbox Code Playgroud)
我尝试了不同的语法:
日期时间格式=dd MM yyyy hh:mm:ss
因此异常而失败:
System.Data.OleDb.OleDbException: '在文本文件规范 'WithDateColumn.csv' 中,DateTimeFormat 选项无效。
日期时间格式=dd MM yyyy
此语法不会导致错误,但日期列为空。
如何使用 Schema.ini 文件从 CSV 读取日期时间?
原来 OleDB在 DateTimes 中使用nn而不是mm来表示分钟。
所以正确的语法是:
日期时间格式=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
| 归档时间: |
|
| 查看次数: |
1621 次 |
| 最近记录: |