OleDbAdapter可以从单个excel列中读取不同格式的日期

时间:2014-10-23 07:55:28

标签: c# excel date-formatting oledbdataadapter

我正在申请中阅读excel文件。我使用OleDbDataAdapter读取和DataTable来存储.xlsx文件中的记录。我有问题从单列读取不同的日期格式。我的专栏看起来像这样:

 2014-02-07 
 2014-02-05 
 27.01.2014 
 19.11.2013
 2014-02-07
 2014-02-07

我的程序只加载“yyyy-MM-dd”格式的日期,其余的都是DBNull.Value。有没有办法将整列作为字符串读取(所以我可以手动操作它们)或强制OleDbDataAdapter读取所有日期?

这是我的代码:

        var fileName = string.Format(@"C:\28.xlsx");
        var connectionstring = string.Format(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + fileName + ";Extended Properties='Excel 12.0 xml;HDR=NO;IMEX=1'");

        var adapter = new OleDbDataAdapter("SELECT * FROM [Sheet1$B12:L]", connectionstring);
        var ds = new DataSet();

        adapter.Fill(ds, "anyNameHere");
        System.Data.DataTable data = ds.Tables["anyNameHere"];

        foreach (DataRow row in data.Rows)
        {
            try
            {
                Console.WriteLine(row.Field<DateTime>(3).ToShortDateString());
            }
            catch
            {
                Console.WriteLine(row.Field<string>(3));
            }
         }

1 个答案:

答案 0 :(得分:0)

OleDb根据第一行的内容(如果标题可用,标题后面的那个)计算出列数据类型,并将其应用于其余行。

所以我建议将列的数据格式更改为文本而不是日期/时间,然后在C#侧处理它们。