繁体   English   中英

将 CSV 导入 SQL

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM