[英]Importing CSV into SQL
我正在尝试将数据从逗号分隔的 csv 文件导入到 SQL。csv 文件的字段用引号引起来,因为某些字段将逗号作为数据的一部分。 如果我在逗号上拆分,它会将有逗号的字段拆分为我不想要的 2 个字段。 如何正确拆分?
CSV 文件样本:
"LASTNAME","FIRSTNAME","MIDNAME","BUSNAME","GENERAL","SPECIALTY"
"BERRY","JOY","YVONNE ",,"MEDICAL PRACTICE, MD","FAMILY PRACTICE",
"BERRY","JOE"," ",,"IND- LIC HC SERV PRO","NURSE/NURSES AIDE"
代码:
try
{
StreamReader sr = new StreamReader(strFilePath);
string line = sr.ReadLine();
string[] value = line.Split(',');
System.Data.DataTable dt = new System.Data.DataTable();
DataRow row;
foreach (string dc in value)
{
dt.Columns.Add(new DataColumn(dc));
}
while (!sr.EndOfStream)
{
value = (sr.ReadLine()).Split(',');
if (value.Length == dt.Columns.Count)
{
row = dt.NewRow();
row.ItemArray = value;
dt.Rows.Add(row);
}
}
SqlBulkCopy bc = new SqlBulkCopy(connsql.ConnectionString, SqlBulkCopyOptions.TableLock);
bc.DestinationTableName = tablename;
bc.BatchSize = dt.Rows.Count;
bc.WriteToServer(dt);
bc.Close();
}
catch (Exception ex)
{
//MessageBox.Show("Error importing Staff Summary: " + ex.Message);
connsql.Close();
}
正如您所发现的,这项任务比仅仅调用string.Split()
更复杂。 您需要解析该行并找出哪些字段被引用,并忽略这些字段中的任何逗号。 此外,此类字段中的成对引号应被视为单引号而不是字段末尾。
您需要逐个字符地解析行。
或者,您可以使用开源库,例如我的SoftCircuits.CsvParser ,它也支持跨越多行的字段。 它甚至具有可以 map CSV 列到 class 属性的类。 它比流行的 CsvHelper 快四倍,您可以直接从 Visual Studio 中添加这个 package。
您应该使用 CSV 解析器,如TextFieldParser - 拆分字符串将不起作用。 (是的,您也可以在 C# 中使用它,即使它是 Visual Basic 库的一部分)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.