使用Microsoft.Ace.Oledb.12.0提供程序时,数据在255个字节后被截断

时间:2014-07-21 12:31:48

标签: c# .net sql-server excel vba

我正在使用ACE提供程序读取Excel工作表,某些单元格包含大于255个字节的数据。我尝试在注册表设置中更改TypeGuessRows,并从连接字符串中设置相同的值。我仍然在代码中得到截断值。我无法重组excel表或使用其他提供商。我运行64位窗口。我的办公室版本是2013年。(如果因为这个原因,请稍微怀疑)。

这是我的连接字符串;它对于那些具有数据< 255个字节。

var connectionString = string.Format("provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + fileName + ";Extended Properties=\"Excel 12.0;IMEX=1;HDR=YES;TypeGuessRows=0;ImportMixedTypes=Text\"");

任何解决方案?提前谢谢。

5 个答案:

答案 0 :(得分:3)

我也在64位Windows 7上使用Microsoft.ACE.OLEDB.12.0

我发现连接字符串中的TypeGuessRows无效。

但是增加以下注册表位置中的TypeGuessRows有效:

  

HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \ Microsoft \ Office \ 12.0 \ Access Connectivity Engine \ Engines \ Excel

More info on a similar bug(虽然您可能已经知道这一点,因为您已经尝试更改TypeGuessRows)

答案 1 :(得分:1)

问题是ACE驱动程序正在为您填充数据集的列推断TEXT数据类型。文本列限制为255个字符。您需要强制它使用MEMO数据类型。

您最好的选择是保证该列中前八行中的大多数的长度超过255个字符。

Source

  

此行为取决于Excel的预测性质   驱动器/供应商。由于它不知道数据类型是什么,它有   根据前几行中的数据进行猜测。如果   字段的内容超过255个字符,它位于第一个字符中   几行,那么数据类型将是Memo,否则就会   可能是Text(会导致截断)。

答案 2 :(得分:1)

解决方案非常简单。 只需将包含此大数据的列的格式更改为excel表中“常规”的“文本”。

现在我觉得自己像个n00b。

答案 3 :(得分:0)

参考此链接。我认为这是问题(尝试使用备注字段)

http://allenbrowne.com/ser-63.html

  

在Access表格中,文本字段限制为255个字符,但备注字段可以处理64,000个字符(约8页单行间隔文本)

很好的解决方法:看一下this堆栈答案

答案 4 :(得分:0)

Excel有一些限制。

Excel specifications and limits - 2013

正如您在发布的链接中看到的那样:

功能最大限制 列宽255个字符