将Null值分配给DataTable中的Integer列

时间:2011-06-15 12:49:42

标签: c# asp.net user-controls types

我有一个带有Integer DataType的One ColumnName“CustomerID”的数据表。 动态地我想向DataTable添加行。为此,我创建了一个DataRow对象,如:

  DataTable dt = new DataTable();
  DataRow DR = dt.NewRow();
  DR["CustomerID"] = Convert.ToInt32(TextBox1.Text);

但是如果TextBox包含空字符串,则会抛出错误。在这种情况下,我想将Null值分配给CustomerID。怎么做?

11 个答案:

答案 0 :(得分:27)

null / empty字符串的格式错误;您需要检测该场景并进行补偿:

    DR["CustomerID"] = string.IsNullOrWhiteSpace(text)
        ? DBNull.Value : (object)Convert.ToInt32(text);

答案 1 :(得分:4)

DR["CustomerID"] = !string.IsNullOrEmpty(TextBox1.Text)
                   ? Convert.ToInt32(TextBox1.Text)
                   : DBNull.Value;

但您还应该检查该值是否为有效整数:

int value;
if(int.TryParse(TextBox1.Text, out value))
{
    DR["CustomerID"] = value;
}
else
{
    DR["CustomerID"] = DBNull.Value;
}

答案 2 :(得分:2)

你可以这样做:

DR["CustomerID"] = string.IsNullOrEmpty(TextBox1.Text) ?
    null : Convert.ToInt32(TextBox1.Text);

答案 3 :(得分:2)

首先,当然,该字段需要在DB中设置为可空。

然后,将其设置为DBNull.Value

答案 4 :(得分:2)

您需要先检查

if (TextBox1.Text.Length > 0)
{
   DR["CustomerID"] = Convert.ToInt32(TextBox1.Text); ;
}
else
{
  DR["CustomerID"] = null;  
}

答案 5 :(得分:2)

Int32 Temp = 0;
if !(Int32.TryParse(TextBox1.Text,Temp))
    DR["CustomerID"] = DBNull.Value
else
    DR["CustomerID"] = Temp

答案 6 :(得分:1)

您可以使用DBNull。

DR["CustomerID"] = (TextBox.Text.Length == 0) ? Convert.ToInt32(TextBox1.Text) : DBNull.Value;

答案 7 :(得分:1)

 if (TextBox1.Text.Trim() == String.Empty)
    {
        DR["CustomerID"] = null;
    }
    else
    {
        DR["CustomerID"] = Convert.ToInt32(TextBox1.Text);
    }

答案 8 :(得分:1)

DataTable dt = new DataTable();
DataRow DR = dt.NewRow();

if (String.IsNullOrEmpty(TextBox1.Text))
    DR["CustomerID"] = DBNull.Value;
else
    DR["CustomerID"] = Convert.ToInt32(TextBox1.Text);

答案 9 :(得分:1)

如果将Integer变量声明为int?它由C#编译器自动装箱,您可以为该变量赋值null。例如:

int? custID = null;

我希望有帮助

答案 10 :(得分:1)

如果不允许null插入DR["CustomerID"],您可以使用(int?)null代替:{/ p>

DR["CustomerID"] = string.IsNullOrEmpty(TextBox1.Text) ?
(int?) null : Convert.ToInt32(TextBox1.Text);