在批量复制之前向DataTable列插入DBNull值

5

我有一个数据表,用于批量复制到SQL服务器数据库中:我按照以下方式定义其列:

dt.Columns.Add("BaseID", typeof(Int32));
dt.Columns.Add("ContractID", typeof(DateTime));
dt.Columns.Add("TermID",typeof(Int32));
dt.Columns.Add("Price",typeof(Decimal));
dt.Columns.Add("PeakType",typeof(String));

现在,PeakType列实际上可以是一个字符串或者是null。因此,当我向数据表中添加行时,我会这样做。

DataRow row = dt.NewRow();
row["BaseID"] = baseID;
row["ContractDate"] = contractDate;
row["TermID"] = termID;
row["Price"] = price;
row["PeakType"] = peakType; //How would I assign If I want to assign DBNull?

如果peakType为null,我该如何指定DBNull.Value,以便我的批量复制可以在SQL服务器表中的列中正确插入一个null?

你尝试过使用 DBNull.Value 吗? - Yuriy Galanter
1个回答

7
使用null coalescing operator操作符。
row["PeakType"] = peakType ?? DBNull.Value;

如果peakType为空,它将使用正确的DB空值。

谢谢。与参数化查询不同的是,我无法使用数据库特定的数据类型来定义数据表的列(例如SqlDbType.IntSqlDbType.NVarchar),而必须使用typeof。在批量插入操作期间是否存在冲突的可能性,或者整数、小数和字符串是否能够正确映射到数据库列的整数、数字和nvarchars上? - Sai
@Sai 如果你在列中输入的 C# 类型与 SQL 中定义的列类型相等,那么你应该是安全的。你只需要进行测试以确保。如果这并没有真正帮到你,我很抱歉。 - TyCobb
不是这样的。谢谢。只需要确认一下。此外,这也是我定义数据列的“数据类型”的原因之一,以便在尝试将流氓值插入数据库之前就可以捕获到由于“数据类型”不匹配而导致的任何错误。 - Sai
在使用core5时,我需要添加一个(对象)转换,如下: row["PeakType"] = peakType ?? (object)DBNull.Value; - KeithL

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接