我现在正在编写很多Extract Transform Load代码用于工作.为了便于从SSIS中读取用户生成的Excel电子表格中的数据,我编写了一个从Excel文件中读取列标题布局的小库,并将数据转储到MS SQL数据库中的表中,该数据库具有与Excel文件相同的架构.它到目前为止工作得很好,但我有几个奇怪的打嗝.
(是的,我知道SSIS原生支持这样的东西.我选择的方法有技术原因,解释它们将超出本文的范围.)
问题是,对于某些输入文件,任何包含日期信息的列都会被破坏.例如,当我执行导入时,日期字符串12/09/2013
会被破坏41617
; Dec 9, 2013 9:19:58 AM
成为41617.388866
.我正在检查它是否试图将其12/09/2013
视为数学方程式,但是(12/09)/2013 = 6.62361
.此外,我已经检查了此电子表格中的单元格格式以及其他一些导入日期字段而没有错误的格式,并且它在任何地方都是相同的 - 自定义,mm/dd/yyyy.
这里最大的问题是,由于我编写的过程的性质,一切都取决于我在运行时不知道文件的结构.我可以改变的飞行数据,但我不知道如何向后工作从41617
去12/09/2013
.
DateTime.TryParse也没用:
DateTime dt; DateTime.TryParse("41617", out dt); Console.WriteLine(dt.ToString());
输出
1/1/0001 12:00:00 AM
以下是我遇到问题的电子表格的剥离,去标识副本的链接:从Google云端硬盘查看/下载
我使用OLE DB连接字符串来读取Excel(2007)文件中的数据:
"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + FilePath + ";Extended Properties = \"Excel 12.0 XML; HDR=YES; IMEX=1\";"
使用Interop类不是一种选择.它们没有设置在服务器上,作为承包商,我不太可能让IT部门进行设置.
然后,我正在使用一个OleDbCommand()
只SELECT *
针对Excel工作表运行,并使用结果填充DataSet.
这让我很难过,我非常感谢任何帮助.
尝试使用
DateTime.FromOADate(value)