用于Excel文件的OleDB连接string帮助

我遇到的问题是数据适配器只查看每列中的第一行来确定数据types。 在我的情况下,第一列“SKU”是前500行的数字,然后我碰巧具有混合的数字和字母的SKU。 那么最后发生的是SKU列中的行是空白的,但是我仍然可以得到每列行的其他信息。

我相信这是连接string控制,并与我目前的设置,它应该工作,但事实并非如此。

连接string:

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行,只是使用文本作为所有值的types。

我把这个“bandaid”放在电子表格的第一行是字母和数字的混合,特别是在我的查询中留下这一行。

不幸的是,您不能从连接string中设置ImportMixedTypesTypeGuessRows ,因为这些设置是在registry中定义的。 对于ACE OleDb驱动程序,它们存储在

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

在registry中。 所以,你可以简化你的连接string:

 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中将TypeGuessRows设置为0并将ImportMixedTypesText ,您应该会获得您期望的行为。 但是,如果您发现导入性能不理想,则可能会考虑使用1000而不是0的适当大的数字。