C# 如何使用ItemArray向DataTable插入空值

C# 如何使用ItemArray向DataTable插入空值,c#,ado.net,C#,Ado.net,我已经编写了经过性能测试的代码 在代码中,我将分割一个逗号分隔的字符串,并将其分配给DataTable行的ItemArray DataRow dr = dt.NewRow(); var itemArray = processedUliValue.Split(','); dr.ItemArray = itemArray; dt.Rows.Add(dr); 在代码的后面部分,我将根据选定的列名将这些itemArray值转换为整数 在这里,如果任何列为空,我将得到异常 因此,我正在寻找在分配item

我已经编写了经过性能测试的代码

在代码中,我将分割一个逗号分隔的字符串,并将其分配给DataTable行的ItemArray

DataRow dr = dt.NewRow();
var itemArray = processedUliValue.Split(',');
dr.ItemArray = itemArray;
dt.Rows.Add(dr);
在代码的后面部分,我将根据选定的列名将这些itemArray值转换为整数

在这里,如果任何列为空,我将得到异常

因此,我正在寻找在分配itemArray时将空值设置为null的方法,我尝试在逗号分隔的字符串中使用DBNull.Value,但没有使用null,我也尝试了null,但也不起作用


是否有任何方法可以使用此逗号分隔的字符串将null分配给ItemArray?

看起来您试图将
DbNull.Value
存储到的列不允许使用null。这对我很有用:

        var dt = new DataTable
        {
            Columns =
                {
                    new DataColumn("Id", typeof(int)),
                    new DataColumn("FirstName", typeof(string)) { AllowDBNull = true },
                    new DataColumn("LastName", typeof(string)) { AllowDBNull = true },
                }
        };

        var row = dt.NewRow();

        row.ItemArray = "1,,Jones".Split(',').Select(s => string.IsNullOrEmpty(s) ? (object)DBNull.Value : (object)s).ToArray();

        dt.Rows.Add(row);

看起来您试图将
DbNull.Value
存储到的列不允许空值。这对我很有用:

        var dt = new DataTable
        {
            Columns =
                {
                    new DataColumn("Id", typeof(int)),
                    new DataColumn("FirstName", typeof(string)) { AllowDBNull = true },
                    new DataColumn("LastName", typeof(string)) { AllowDBNull = true },
                }
        };

        var row = dt.NewRow();

        row.ItemArray = "1,,Jones".Split(',').Select(s => string.IsNullOrEmpty(s) ? (object)DBNull.Value : (object)s).ToArray();

        dt.Rows.Add(row);

为什么不在将列值转换为int之前检查列值是否为空?这样似乎更简单。

为什么不在将列值转换为int之前检查列值是否为空?这样似乎更简单。

为此,我必须编写额外的代码来拆分字符串,并为每列分配一个值并检查null,我有许多列,我正在寻找更简单的方法,因为我必须编写额外的代码来拆分字符串,为每列分配一个值并检查null,我有很多专栏,我正在寻找更简单的方法,我会尝试,但这似乎是最好的答案我会尝试,但似乎这是最好的答案