【问题标题】:Importing CSV into SQL将 CSV 导入 SQL
【发布时间】:2020-09-22 19:46:33
【问题描述】:

我正在尝试将数据从逗号分隔的 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();
        }

【问题讨论】:

标签: c# sql csv


【解决方案1】:

正如您所发现的,该任务比调用string.Split() 更复杂。您需要解析该行并查找引用了哪些字段,并忽略这些字段中的任何逗号。此外,此类字段中的双引号应被视为单引号,而不是字段的结尾。

您需要逐个字符地解析行。

或者,您可以使用我的SoftCircuits.CsvParser 等开源库,它还支持跨多行的字段。它甚至具有可以将 CSV 列映射到类属性的类。它比流行的 CsvHelper 快四倍,您可以直接从 Visual Studio 中添加这个包。

【讨论】:

    【解决方案2】:

    您应该使用像 TextFieldParser 这样的 CSV 解析器 - 拆分字符串不起作用。 (是的,你也可以在 C# 中使用它,即使它是 Visual Basic 库的一部分)。

    【讨论】:

      猜你喜欢
      • 2011-07-04
      • 1970-01-01
      • 1970-01-01
      • 2021-02-04
      • 2012-04-05
      • 2012-12-24
      • 1970-01-01
      • 2013-02-20
      • 2014-10-29
      相关资源
      最近更新 更多