OleDB,错过了数据的第一个字符

 飞儿gxj_505 发布于 2023-02-09 18:41

我有一个用于我维护的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文本文件

1 个回答
  • 我建议你用十六进制编辑器检查一个问题文件 - 检查导致问题的行和它前面的行.

    特别要看行终止符(仅CR/LF?CR?仅限LF?)并查找任何不可打印的字符.

    2023-02-09 18:42 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有