我有一个用于我维护的ASP.NET应用程序的CSV读取代码.这个ASP.NET网站从3年开始运行良好,使用Ole.JetDB.4.0的CSV读取代码正常运行,除了偶尔有一些超过4K-5K记录的CSV会产生问题.通常问题是随机位置[随机行]的记录错过了它的第一个字符.
CSV文件只是每行的一堆名称和地址,它们是ASNI格式.CSV是逗号分隔,数据中没有数据"逗号",现在用单引号或双引号括起字段.此外,它不经常发生,我们使用相同的代码说70K记录上传他们工作正常,但有些时间说在3年内约3-4个文件只有这个问题,我们每天上传一个文件.
对于那些需要我做的人
using (System.Data.OleDb.OleDbConnection conn = new System.Data.OleDb.OleDbConnection ("Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties='text;HDR=Yes;FMT=Delimited';Data Source=" + HttpContext.Current.Server.MapPath("/System/SaleList/")) { string sql_select = "select * from [" + this.FileName + "]"; System.Data.OleDb.OleDbDataAdapter da = new System.Data.OleDb.OleDbDataAdapter(); da.SelectCommand = new System.Data.OleDb.OleDbCommand(sql_select, conn); DataSet ds = new DataSet(); // Read the First line of File to know the header string[] lines = System.IO.File.ReadAllLines(HttpContext.Current.Server.MapPath("/System/SaleList/") + FileName); string header = ""; if (lines.Length > 0) header = lines[0]; string[] headers = header.Split(','); CreateSchema(headers, FileName); da.Fill(ds, "ListData"); DataTable dt = ds.Tables["ListData"]; }
除了提及之外,这段代码工作得很好.我削减了一些不相关的部分,因此可能无法通过复制粘贴工作.
编辑:更多信息
我尝试使用ODBC与Microsoft文本驱动程序,然后我使用ACE驱动程序与OleDB.结果与所有三个驱动器相同.
如果我交换问题记录,使用前面的行读取那些行,直到下一个问题行[如果多个行在原始文件中有问题],如果那些只是问题行,它可以正常工作.
所以从上面看起来有些东西会让人分心,但我怎么能确保它顺利工作仍然是一个小测验.
编辑2:我已将此作为错误提交给Microsoft:https://connect.microsoft.com/VisualStudio/feedback/details/811869/oledb-ace-driver-12-jet-4-0-or-odbc-text -driver-ALL-未能导读取数据正确地从- CSV文本文件
我建议你用十六进制编辑器检查一个问题文件 - 检查导致问题的行和它前面的行.
特别要看行终止符(仅CR/LF?CR?仅限LF?)并查找任何不可打印的字符.