从Excel中读取日期列

时间:2015-08-07 12:14:46

标签: c#

我正在从Excel文件中读取日期列

var dt = new DataTable();
string query = string.Format("SELECT  * FROM [{0}]", sheetName);

con1.Open();
OleDbDataAdapter adapter = new OleDbDataAdapter(query, con1);
adapter.Fill(dt);

using (SqlConnection con = new SqlConnection(consString))
{
    con.Open();

    for (int i = 1; i < dt.Rows.Count; i++)
    {
        for (int j = 1; j < dt.Columns.Count; j ++)
        {
            MessageBox.Show(dt.Rows[0][j].ToString());

            SqlCommand command = new SqlCommand("INSERT INTO [Budget Geant Preload]([CA TTC], [VAL MRG TTC], [CA HT], [VAL MRG HT], [Rayon], [Date], [Code Site], [Rayon Correspondance], TVA) VALUES(NULL, NULL, @ca, NULL, @rayon, @date, '2000', @rayon, null )", con);
            command.Parameters.AddWithValue("@date", dt.Rows[0][j]);
            command.Parameters.AddWithValue("@ca", dt.Rows[i][j]);
            command.Parameters.AddWithValue("@rayon", dt.Rows[i][0]);

            command.ExecuteNonQuery();
        }
    }
}    

数据示例

enter image description here

我需要获得01/01/2015,但它会返回42217。如何解决?

2 个答案:

答案 0 :(得分:4)

Datetime.fromOAdate()应该做的工作。

更新

我只是想对答案进行一些扩展。

在Excel中,日期存储为浮点数,即自19/1/19以来的日期数。它看似随意,但它增加和减少时间(几乎)只是简单的加法和减法。实际上,在.net中,日期时间结构在内部是相同的,只是使用刻度线。

答案 1 :(得分:3)

检查OAdate

var time = DateTime.FromOADate(42217);

关于Interop Dates

的另一个参考