使用Microsoft Jet OLEDB对CSV进行列限制

我正在从包含大约350列的CSV导入数据。 此CSV导入已修复,我完全无法控制它。

如果我尝试在Excel 2003中打开CSV,则由于列限制为255(IV),它仅部分加载。

当我使用OleDb和Microsoft.Jet.OLEDB.4.0将CSV加载到DataSet时,它也只显示255列。 更糟糕的是,当尝试访问这些255列中的某些列的数据时,它显示不正确的数据并且不断地分割这些值。

如果我在Excel中打开CSV,让它截断数据并重新保存,我的导入工作正常。

我的问题是,有没有其他人遇到Jet.OLEDB提供商的这种限制。 如果是,是否有问题的解决方法? 如果不是,是否有可用的替代解决方案可以加载如此大的CSV?

注意:这不是一次性任务,我需要为最终用户提供一个浏览/上传按钮,以便在需要时执行此导入。

我们使用http://www.codeproject.com/KB/database/CsvReader.aspx取得了很大成功。

您可以浏览此代码,使用ExcelDataReader并在项目中添加引用。 并使用下面的代码……

FileStream stream = File.Open(strFileName, FileMode.Open, FileAccess.Read); IExcelDataReader excelReader = ExcelReaderFactory.CreateOpenXmlReader(stream); DataSet result = excelReader.AsDataSet(); excelReader.Close(); return result.Tables[0]; 

我建议以面向对象的方式进行。 尝试使用File Helpers库。 http://www.wenhelpers.com/ 。 它允许您为文件中的每一行都有一个对象表示。 然后,您可以将此对象持久保存到数据库中。

schema.ini文件放在与CSV文件相同的文件夹中。 请参阅此处获取完整语法