C#创建Excel文件 - JET.OLEDB.4.0和ACE.OLEDB.12.0以不同的日期格式输出相同的数据列

时间:2016-05-13 17:08:15

标签: c# excel oledb oledbcommand

我发现了一些有趣的事情,我似乎无法在其上找到任何内容,尽管我已经找到了类似案例的一些有趣信息。

我尝试仅使用OLEDB和ADO.NET在服务器(Windows 2003 Server 32位)上创建Excel工作簿。 (我尝试了ADO,但它根本不起作用 - 不同的故事。)我使用CREATE TABLE语句生成Excel工作簿,然后我使用INSERT INTO语句添加电子表格的值。

我的开发机器上出现的问题 - 一台Windows 7 64位笔记本电脑。我还没有把它移到生产环境(服务器)。

我拉的数据存储在数据表(System.Data)中,来自MS Access数据库。电子表格的连接字符串会有所不同,具体取决于我是尝试创建较新的格式还是较旧的格式。

这就是事情:当我使用Microsoft.Jet.OLEDB.4.0作为提供者时,我得到的电子表格至少可以说没有吸引力,但是具有正确格式的所有正确数据。特别是,我在这里谈论 date 列 - 它们被格式化为m / d / yyyy,这是正确的。

当我使用Microsoft.ACE.OLEDB.12.0作为提供者时,日期格式 - 来自完全相同的数据表 - 格式化为格式为yyyy-mm-dd hh:mm的字符串: SS

我不知道为什么数据在两者中都没有相同的格式。我检查了其中一个日期列的数据表的数据类型,无论我使用哪个提供程序,它都会以DateTime的形式签入。

以下是正在使用的连接字符串:

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电子表格在日期列中显示日期。 OLEDB.12.0版本没有。

任何人都有任何想法可能会发生这种情况?虽然我可以简单地使用Jet提供程序,但它无法创建最新Excel版本的xlsx格式。 (确实如此,但打开时会出现令人讨厌的警告信息。)但如果日期列是字符串而不是日期,我就无法使用新版本。

我已尝试添加" IMEX = 1"作为连接字符串的扩展属性部分的一部分,这会在执行INSERT INTO语句期间导致错误。研究该错误显示删除了" IMEX = 1"解决了这个问题,所以我无法在连接字符串中使用它。

我很难知道如何处理这个问题,我在这里和其他论坛上发布的大部分帖子都说明了当数据来自Excel时如何解决这个问题,但我没有做什么&#39 ; ve found表明为什么来自数据库的数据看起来与Excel不同。

非常感谢任何帮助。

0 个答案:

没有答案