Excel文件的OleDB连接字符串帮助

20

我的问题是数据适配器只查看每个列中的第一行以确定数据类型。在我的情况下,前500行的第一列“SKU”是数字,然后我有混合数字和字母的SKU。因此,SKU列中的行将留空,但我仍将获得每个列行的其他信息。

我认为它是连接字符串控制的,而根据我的当前设置,它应该工作,但实际上并没有。

连接字符串:

conn.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Nick\Desktop\Pricing2.xlsx" + @";Extended Properties=""Excel 12.0 Xml;HDR=Yes;IMEX=1;ImportMixedTypes=Text;TypeGuessRows=0""";


ImportMixedTypes=Text;TypeGuessRows=0

应该是重要的关键词,查看0行并将文本作为所有值类型的值。

我打的"临时措施"是在电子表格中将第一行设置为字母和数字的混合,并明确地在我的查询中排除这一行。


1
你尝试过不同的提供商,比如JET而不是ACE吗?在这里查看其他可能的连接字符串格式:http://www.connectionstrings.com/excel - goric
我已经访问了那个网站并尝试了所有方法。我希望有更好的方法来解决这个问题。如果他们想要设计系统以接受长字符串,他们需要发布一个免费的生成器。唉... - The Muffin Man
1
@theprise JET仍然会有相同的问题,因为需要修改的值都在注册表中,无法从连接字符串中设置。 - arcain
1个回答

31

很遗憾,您无法从连接字符串设置ImportMixedTypesTypeGuessRows,因为这些设置在注册表中定义。对于ACE OleDb驱动程序,它们存储在

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\14.0\Access Connectivity Engine\Engines\Excel

在注册表中有一个名为ODBC的键。因此,你可以简化你的连接字符串为:

conn.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Nick\Desktop\Pricing2.xlsx;Extended Properties=""Excel 12.0 Xml;HDR=Yes;IMEX=1;""";

如果您将注册表中的TypeGuessRows设置为0并将ImportMixedTypes设置为Text,则应该获得您所期望的行为。但是,如果您发现导入性能不理想,可以考虑使用一个足够大的数字,如1000。


11
请注意,如果您使用的是64位机器,则需要在注册表键中添加Wow6432Node,使其变为:HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Office\12.0\Access Connectivity Engine\Engines\Excel - amarsuperstar
1
@soclose HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node 键仅存在于64位Windows安装中。http://en.wikipedia.org/wiki/WoW64 - arcain
3
有没有办法通过编程实现这个? - Loogawa
1
你可以通过使用Microsoft.Win32.Registry类来编写代码设置值,但我不建议在打开连接之前即时执行此操作。 - arcain
此外,值得一读的是osreads 答案 - Fredrick Gauss
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接