【问题标题】:Help with a OleDB connection string for excel filesexcel文件的OleDB连接字符串帮助
【发布时间】:2011-05-31 20:59:03
【问题描述】:

我遇到的问题是数据适配器只查看每列中的第一行来确定数据类型。在我的情况下,第一列“SKU”是前 500 行的数字,然后我碰巧有混合数字和字母的 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行就用文本作为所有的值类型。

我使用的“创可贴”是将电子表格中的第一行混合为字母和数字,并在我的查询中特别保留该行。

【问题讨论】:

  • 您是否尝试过不同的提供商,例如 JET 而不是 ACE?在此处查看其他可能的连接字符串格式:connectionstrings.com/excel
  • 我已经去过那个网站并尝试了所有方法。我希望有更好的方法来做到这一点。如果他们想将系统设计为长字符串,他们需要发布一个免费的生成器。呃……
  • @theprise JET 仍然会出现同样的问题,因为需要修改的值都在注册表中,无法从连接字符串中设置。

标签: c# connection-string oledbconnection import-from-excel


【解决方案1】:

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

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

在注册表中。因此,您可以将连接字符串简化为:

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 设置为0ImportMixedTypes 设置为Text 后,您应该会得到预期的行为。但是,如果您发现导入性能不太理想,您可以考虑使用适当的大数字(例如 1000)而不是零。

【讨论】:

  • 请注意,如果您使用的是 64 位计算机,则需要将 Wow6432Node 添加到注册表项中,以便它变为:HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Office\12.0\Access Connectivity Engine\Engines\Excel
  • 我根据link 编辑注册表。它在 windows xp 中有效,但在 windows 7 中无效。我是否需要将 Wow6432Node 放入 32 位或 64 位的注册表项中?
  • @soclose HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node 密钥仅存在于 64 位 Windows 安装中。 en.wikipedia.org/wiki/WoW64
  • 有没有办法以编程方式做到这一点?
  • 可以通过代码设置值的一种方法是使用Microsoft.Win32.Registry 类,但我不建议在打开连接之前立即执行此操作。
猜你喜欢
  • 1970-01-01
  • 2013-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-31
  • 2018-04-20
  • 2011-09-28
相关资源
最近更新 更多