C#创buildExcel文件 – JET.OLEDB.4.0和ACE.OLEDB.12.0以不同的date格式输出相同的数据列
我有一些有趣的事情发生,我似乎无法find任何东西,虽然我发现了一些类似的案件有趣的信息。
我正在尝试在仅使用OLEDB和ADO.NET的服务器(即Windows 2003 Server 32位)上创buildExcel工作簿。 (我尝试了ADO,但它根本不起作用 – 不同的故事)。我使用CREATE TABLE语句生成Excel工作簿,然后使用INSERT INTO语句将值添加到电子表格中。
我遇到的问题发生在我的开发机器 – Windows 7 64位笔记本电脑上。 我还没有把它移到生产环境(服务器)。
我拉的数据存储在一个数据表(System.Data),并来自一个MS Access数据库。 电子表格的连接string有所不同,具体取决于我是否尝试创build较新的格式或较旧的格式。
下面是这个事情:当我使用Microsoft.Jet.OLEDB.4.0作为提供者时,我得到了一个电子表格,这个电子表格至less是没有吸引力的,但是却拥有正确格式的所有正确的数据。 特别是,我在这里谈论date栏 – 它们被格式化为m / d / yyyy,这是正确的。
当我使用Microsoft.ACE.OLEDB.12.0作为提供程序时,date格式(从完全相同的数据表)格式化为格式为yyyy-mm-dd hh:mm:ss的string。
我不知道为什么这两个数据都不是相同的格式。 我检查了其中一个date列的数据表的数据types,并且无论我使用哪个提供者,它都检查为DateTime。
这里是使用的连接string:
OleDbConnection cn = new OleDbConnection(string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data source={0}{1};" + "Extended Properties='Excel 12.0 Xml;HDR=YES;'", ssPth, ssXlsx));
第二个是:
OleDbConnection cn = new OleDbConnection(string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data source={0}{1};" + "Extended Properties='Excel 8.0;HDR=YES;';", ssPth, ssXls));
我使用两个版本完全相同的CREATE TABLE和INSERT INTO语句。 OLEDB.4.0电子表格在date栏中列出date。 OLEDB.12.0版本没有。
任何人有任何想法,为什么这可能会发生? 虽然我可以简单地使用Jet提供程序,但无法创build最近Excel版本的xlsx格式。 (它的确如此,但是在打开时会出现令人讨厌的警告信息)。但是如果date列是string而不是date,我不能使用较新的版本。
我已经尝试添加“IMEX = 1”作为连接string的扩展属性部分的一部分,这会导致执行INSERT INTO语句时出错。 研究这个错误揭示了删除“IMEX = 1”解决了这个问题,所以我不能在连接string中使用它。
我难以理解如何处理这个问题,在这里以及我读过的其他论坛中的大多数post都指出了如何在Excel中发布数据时解决这个问题,但是我没有发现任何数据表明数据库中的数据看起来不同到Excel。
任何援助非常感谢。