首页 > 解决方案 > 使用 FileHelpers 时,如何在 SQL Server 中将 CSV 空字符串加载为 NULL?

问题描述

我正在使用 FileHelpers 读取 CSV 以加载 SQL Server 表。

CSV 看起来像这样:

ID, SOMESTRING
"10","Blah blah"
"11",""
"12","More blah blah"

我的记录映射类看起来像这样:

[IgnoreFirst, DelimitedRecord(",")]
class Mytable
{
    [FieldQuoted]
    public ulong Id;

    [FieldQuoted]
    [FieldNullValue(typeof(string), null)]
    public string SomeString;
}

最后,批量复制到数据库的代码是:

  SqlBulkCopy bc = new SqlBulkCopy(mySqlConnection);
  bc.DestinationTableName = "dbo.MYTABLE";
  bc.WriteToServer(new FileHelperEngine<Mytable>().ReadFile(baseDir + "\\" + "MYTABLE.CSV").ToDataTable<Mytable>());

最初,我没有包含 FieldNullValue 属性,但是否包含它似乎并不重要。在这两种情况下,第 11 行在 SQL Server 中导入为空字符串。我希望它为 NULL。这可以做到吗?

标签: c#ado.netfilehelpers

解决方案


使用 FileHelpers 空字符串将被解析为String.Empty,但您可以使用自定义转换器覆盖它:

public class EmptyStringConverter : ConverterBase
{
    public override object StringToField(string sourceString)
    {
        if (String.IsNullOrWhiteSpace(sourceString))
            return null;
        return sourceString;
    }
}

然后你像这样定义你的记录类属性

[FieldConverter(typeof(EmptyStringConverter))]
public string SomeString;

如果对应的字符串SomeString为空或空白,则将其转换为null。


推荐阅读