SqlBulkCopy从Excel导入时间字段作为datetime列

时间:2017-04-20 08:37:08

标签: c# sql-server excel datetime

我已经远远地搜索了一个答案,但是我无法得到我需要的东西,所以我走了:

我有几个Excel文件。我需要将它们导入SQL Server表。所有文件,但一个是导入确定(我在一个小的Windows窗体应用程序中使用C#)。

问题是.xlsx文件中有两个时间列。在Excel中,对于文件,它们的格式设置为General,导入正常。

对于有问题的文件,格式设置为Time。这导致将时间作为datetime导入SQL Server,其固定日期为1899 30 12,并附加到实际时间。请注意,我已尝试将格式更改为General,但会生成浮点数,这些浮点数将作为浮点数导入SQL Server。

目标SQL Server列是nvarchar(255)(甚至不让我开始关于数据库设计,遗憾的是,我无法控制它进行更改)。

我不知道在哪里查看(这是一个Excel格式问题,它是代码中的一些隐形转换......)

这是我的代码:

public string bulkInsertFile(string file)
{
    using (OleDbConnection con = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source="+file+";Extended Properties='Excel 12.0 Xml;HDR=YES;'"))
    {
        con.Open();
        OleDbCommand com = new OleDbCommand("Select * from [Data$]", con);
        OleDbDataReader dr = com.ExecuteReader();
        using (SqlConnection sqlcon = new SqlConnection(ConfigurationManager.ConnectionStrings["Sql"].ConnectionString))
        {
            sqlcon.Open();
            using (SqlBulkCopy bulkCopy = new SqlBulkCopy(sqlcon))
            {
                bulkCopy.ColumnMappings.Add("start_time", "start_time");
                bulkCopy.ColumnMappings.Add("end_time", "end_time");
            }
        }
    }
    dr.Close();
    dr.Dispose();
    return "Upload Successfull!";
}

0 个答案:

没有答案