0

我正在尝试将文本文件 (.csv) 加载到 SQL Server 数据库表中。文件中的每一行都应该加载到表中的单个列中。我发现以“#”开头的行被跳过,没有错误。例如,以下四行中的前两行加载正常,但后两行加载不正常。有人知道为什么吗?

ThisLineShouldBeLoaded

这个也是

#ThisIsATestLine

#这是另一条测试线

这是我的代码段:

    var sqlConn = connection.StoreConnection as SqlConnection;
    sqlConn.Open();

    CsvReader reader = new CsvReader(new StreamReader(f), false);

    using (var bulkCopy = new SqlBulkCopy(sqlConn))
    {
      bulkCopy.DestinationTableName = "dbo.TestTable";
      try
      {
        reader.SkipEmptyLines = true;
        bulkCopy.BulkCopyTimeout = 300;
        bulkCopy.WriteToServer(reader);
        reader.Dispose();
        reader = null;
      }
      catch (Exception ex)
      {
        Console.WriteLine(ex.Message);
        System.Diagnostics.Debug.WriteLine(ex.Message);
        throw;
      }
    }
4

1 回答 1

0

#是 CsvReader 的默认注释字符。您可以通过更改Configuration 对象的 Comment 属性来更改注释字符。AllowComment您可以通过将属性设置为 来完全禁用评论处理false,例如:

reader.Configuration.AllowComments=false;

SqlBulkCopy根本不处理 CSV 文件,它会发送任何传递给WriteServer数据库的数据。它不关心数据来自哪里或它包含什么,只要列映射匹配

更新

假设LumenWorks.Framework.IO.Csv引用这个项目,可以在构造函数中指定注释字符。可以将其设置为不会出现在普通文件中的东西,甚至可能是 NUL 字符,默认char值:

CsvReader reader = new CsvReader(new StreamReader(f), false, escape:default);

或者

CsvReader reader = new CsvReader(new StreamReader(f), false, escape : '\0');
于 2020-12-10T22:55:12.593 回答