Excel单元格值由OLEDB提供程序截断

我使用OleDbConnection类从Excel 2000/2003工作簿检索数据:

string connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + filename + ";" + "Extended Properties=\"Excel 8.0;IMEX=1\";"; OleDbConnection connection = new OleDbConnection(connectionString); connection.Open(); // code to get table name from schema omitted var dataAdapter = new OleDbDataAdapter(string.Format("SELECT * FROM [{0}]", name),connection); var myDataSet = new DataSet(); dataAdapter.Fill(myDataSet, "ExcelInfo"); 

现在事实certificate,长度大于255个字符的工作表中的单元格被截断。 这是Microsoft.Jet.OLEDB提供程序中的限制,还是我可以做些什么呢?

任何人?

用于excel的OLEDB提供程序将尝试根据前8行数据自动确定数据types,可以使用连接string中的HDR = Yes / No属性进行设置。 此外,还有多种可应用于文本列的types。 备忘录types保存超过255个字符,所以如果没有前8行有这个,那么它会错误地设置数据types。

改变这种方式是通过改变一个名为TypeGuessRows的registry设置,如下所述: Microsoft支持

注:TypeGuessRows键的值的有效范围是0到16.但是,如果值为0,则扫描的源行数为16384.因此,如果文件非常大,请确保最大的行是第一行。

试试这个通过堆栈溢出发布的OleDBAdapter Excel QA 。

我填充工作表单元格(行[0] [4])瓦特/ 445个字符,它工作得很好…将其添加到输出代码的结尾

 // DataSet: Object row0Col3 = ds.Tables["xlsImport"].Rows[0][2]; Object row0Col4 = ds.Tables["xlsImport"].Rows[0][4]; string rowZeroColumn3 = row0Col3.ToString(); string rowZeroColumn4 = row0Col4.ToString(); Console.WriteLine("Row 0, Col 4 string length: {0} " + Environment.NewLine + "Excel content: {1}", rowZeroColumn4.Length, rowZeroColumn4);