【发布时间】:2020-12-31 23:38:31
【问题描述】:
我有将新值插入数据库的功能:
public async Task BulkAdd(IDataReader data)
{
if (Connection.State == ConnectionState.Broken || Connection.State == ConnectionState.Closed)
{
await Connection.OpenAsync();
}
using (SqlBulkCopy bulk = new SqlBulkCopy(Connection))
{
bulk.DestinationTableName = GetTableName();
bulk.BatchSize = BATCH_SIZE;
bulk.BulkCopyTimeout = 0; // for infinity write 0
bulk.EnableStreaming = true;
await bulk.WriteToServerAsync(data);
}
}
插入字符串按顺序生成,如下所示:
,,11111,,7,,620,7 11111,04/15/2013 00:00:00,false,Bulgaria, 然后转换为CsvDataReader:
var csvStreamReader = MapDataExtraWithHeaders(reader, clientId, dataExtraHeadersMap, delimiter, uploadDataId, dateFormat);
using (var csv = new CsvReader(csvStreamReader))
{
csv.Configuration.BadDataFound = null;
csv.Configuration.Delimiter = delimiter;
// ADDED
csv.Configuration.TypeConverterCache.AddConverter<string>(new EmptyAsNullConverter());
var dataReader = new CsvDataReader(csv);
csv.ReadHeader();
if (!HeadersValid(csv.Context.HeaderRecord, DataHeaders))
throw new CvtException(CVTExceptionCode.Import.InvalidHeaders);
await _transactionsDataRepository.BulkAdd(dataReader);
}
我添加了空约束,例如:
alter table [dbo].[Extra] add constraint [DF_Custom] default (null) for [Custom]
但是,当我查看添加的内容时,我发现添加了空字符串而不是 NULL。怎么解决?
【问题讨论】:
-
您使用什么 CSV 库?也许您可以在列上选择将空值读取为 null。
-
你能把
CsvDataReader传递给BulkAdd的那一行加到BulkAdd吗? -
你能具体说明你使用的是哪个 CSV 库吗?
-
我正在使用nuget.org/packages/CsvHelper@Vernou
标签: c# sql-server tsql .net-core