【发布时间】:2018-01-12 14:17:46
【问题描述】:
我正在使用 OLEDB 将 CSV 文件解析为 DataTable。它工作正常,但是当 CSV 中的某些值包含双引号(“)时会产生问题。OLEDB 会跳过该行中下一个剩余列的值。
例如,我在 CSV 文件中有以下值。这里第二行 Col2 的值包含双引号(“)。
当我将 CSV 解析为 DataTable 时,DataTable 包含以下值。这里第二行空白处是col3和col4的值。
我正在使用以下连接字符串
"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filePath + ";Extended Properties='text;HDR=Yes;IMEX=1;ColNameHeader=True;CharacterSet=65001;FMT=Delimited(,)'"
查询是
"select * from [" + fileName + "]"
这是完整的代码
string connStr = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filePath + ";Extended Properties='text;HDR=Yes;IMEX=1;ColNameHeader=True;CharacterSet=65001;FMT=Delimited(,)'";
using (OleDbConnection conn = new OleDbConnection(connStr))
{
conn.Open();
table = new DataTable();
var dataAdapter = new OleDbDataAdapter("select * from [" + fileName + "]", conn);
dataAdapter.Fill(table);
}
如何忽略值中的双引号(“)?
注意:我是从第三方下载的文件,直接使用这个 CSV 进行解析。
【问题讨论】:
-
它在 visualbasic 命名空间中,但肯定可以在 c# 中使用。有一个名为 TextFieldParser 的类可以轻松处理 CSV。 msdn.microsoft.com/en-us/library/… 可以试试这个而不是 oledb?
-
@Jeremy - 它适用于文件大小 > 300MB 吗?
-
它的构造函数脱离了标准的 .NET 流对象,因此您可以使用最适合您的情况的任何流策略。