Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# SQL bulkCopy写入空字符串而不是NULL_C#_Sql Server_Tsql_.net Core - Fatal编程技术网

C# SQL bulkCopy写入空字符串而不是NULL

C# SQL bulkCopy写入空字符串而不是NULL,c#,sql-server,tsql,.net-core,C#,Sql Server,Tsql,.net Core,我有一个将新值插入数据库的函数: 公共异步任务数据读取器数据 { 如果Connection.State==ConnectionState.breaked | | Connection.State==ConnectionState.Closed { 等待连接。OpenAsync; } 使用SqlBulkCopy bulk=newsqlbulkcopyconnection { bulk.DestinationTableName=GetTableName; bulk.BatchSize=批次大小; b

我有一个将新值插入数据库的函数:

公共异步任务数据读取器数据 { 如果Connection.State==ConnectionState.breaked | | Connection.State==ConnectionState.Closed { 等待连接。OpenAsync; } 使用SqlBulkCopy bulk=newsqlbulkcopyconnection { bulk.DestinationTableName=GetTableName; bulk.BatchSize=批次大小; bulk.BulkCopyTimeout=0;//对于无限写0 bulk.EnableStreaming=true; 等待bulk.WriteToServerAsyncdata; } } 插入字符串按顺序生成,如下所示: ,11111,,7,,620,7 11111,04/15/2013 00:00:00,false,保加利亚,然后转换为CsvDataReader:


然而,当我查看添加的内容时,我看到添加的不是空字符串,而是空字符串。如何解决这个问题?

您可以将CSV绑定到类并为其编写一个转换器

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

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

您可以将CSV绑定到类并为其编写转换器

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

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

您可以编写自定义转换器将空转换为空:

公共类空空空转换器:CsvHelper.TypeConversion.StringConverter { 公共重写对象ConvertFromStringstring文本、IReaderRow行、MemberMapData MemberMapData { 如果string.IsNullOrEmptytext 返回null; 其他的 返回base.ConvertFromStringtext、row、memberMapData; } } 归功于

使用示例:

静态环[]args { 变量文本= a、 b、c、e、f+Environment.NewLine+ a、 、c、e、f+Environment.NewLine+ a、 b,c,f; 使用var csv=new CsvReadernew StringReadertext,CultureInfo.InvariantCulture { csv.Configuration.TypeConverterCache.AddConverternew EmptyAsNullConverter; 边读边读 { forint i=0;i<5;i++ { Console.Write${csv.GetFieldi??null}\t; } Console.WriteLine; } } 控制台。阅读; } 输出:

a       b       c       e       f
a       null    c       e       f
a       b       c       null    f

您可以编写自定义转换器将空转换为空:

公共类空空空转换器:CsvHelper.TypeConversion.StringConverter { 公共重写对象ConvertFromStringstring文本、IReaderRow行、MemberMapData MemberMapData { 如果string.IsNullOrEmptytext 返回null; 其他的 返回base.ConvertFromStringtext、row、memberMapData; } } 归功于

使用示例:

静态环[]args { 变量文本= a、 b、c、e、f+Environment.NewLine+ a、 、c、e、f+Environment.NewLine+ a、 b,c,f; 使用var csv=new CsvReadernew StringReadertext,CultureInfo.InvariantCulture { csv.Configuration.TypeConverterCache.AddConverternew EmptyAsNullConverter; 边读边读 { forint i=0;i<5;i++ { Console.Write${csv.GetFieldi??null}\t; } Console.WriteLine; } } 控制台。阅读; } 输出:

a       b       c       e       f
a       null    c       e       f
a       b       c       null    f

您使用什么CSV库?也许您在列上有一个选项,可以将空值读取为null。您可以添加CsvDataReader传递给BulkAdd的行吗?您可以确定您使用的CSV库吗?我使用的是@vernout。这个问题类似于您使用的CSV库吗?也许您在列上有一个选项,可以将空值读取为null。您可以添加CsvDataReader传递给BulkAdd的行吗?您可以确定您使用的CSV库吗?我使用的是@vernout。这个问题类似于您可以查看我的更改吗?我添加了这一行“csv.Configuration.TypeConverterCache.AddConverternew EmptyAsNullConverter;”但它不会被触发。。。。值仍然写为stringsCan你看我的更改了吗?我添加了这一行“csv.Configuration.TypeConverterCache.AddConverternew EmptyAsNullConverter;”但它不会被触发。。。。值仍然被写为字符串