【问题标题】:Assign Null value to the Integer Column in the DataTable将 Null 值分配给 DataTable 中的整数列
【发布时间】:2011-09-15 12:28:13
【问题描述】:

我有一个数据表,其中一个 ColumnName "CustomerID" 和 Integer DataType。 我想动态地将行添加到 DataTable。为此,我创建了一个 DataRow 对象,例如:

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

但如果 TextBox 包含空字符串,则会引发错误。在这种情况下,我想将 Null 值分配给 CustomerID。如何做到这一点?

【问题讨论】:

  • @Marc 为什么不向他推荐一些东西,而不是使用 DataTable?
  • @Marc:是的。我正在使用数据表。

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


【解决方案1】:

你需要先检查

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

【讨论】:

    【解决方案2】:

    null不允许插入DR["CustomerID"]时,你可以像这样使用(int?)null

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

    【讨论】:

    • null 不是可接受的值,您必须使用 DBNull.value
    【解决方案3】:
    Int32 Temp = 0;
    if !(Int32.TryParse(TextBox1.Text,Temp))
        DR["CustomerID"] = DBNull.Value
    else
        DR["CustomerID"] = Temp
    

    【讨论】:

      【解决方案4】:

      空/空字符串格式错误;您需要检测这种情况并进行补偿:

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

      【讨论】:

      • 如果我们必须像MyDataTable.Columns.Add("CustomerID", typeof(int)) 那样手动构建DataTable,我们是否应该将CustomerID 字段定义为像int? 这样的Nullable 类型?
      【解决方案5】:

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

      int? custID = null;
      

      希望对你有帮助

      【讨论】:

        【解决方案6】:
        DataTable dt = new DataTable();
        DataRow DR = dt.NewRow();
        
        if (String.IsNullOrEmpty(TextBox1.Text))
            DR["CustomerID"] = DBNull.Value;
        else
            DR["CustomerID"] = Convert.ToInt32(TextBox1.Text);
        

        【讨论】:

          【解决方案7】:

          首先,当然需要在数据库中将该字段设置为可为空。

          然后,将其设置为DBNull.Value

          【讨论】:

            【解决方案8】:

            你可以这样做:

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

            【讨论】:

              【解决方案9】:
               if (TextBox1.Text.Trim() == String.Empty)
                  {
                      DR["CustomerID"] = null;
                  }
                  else
                  {
                      DR["CustomerID"] = Convert.ToInt32(TextBox1.Text);
                  }
              

              【讨论】:

              • 不接受null,必须使用DBNull.value
              【解决方案10】:

              您可以使用 DBNull。

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

              【讨论】:

                【解决方案11】:
                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;
                }
                

                【讨论】:

                  猜你喜欢
                  • 2011-10-02
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2018-03-03
                  • 1970-01-01
                  • 1970-01-01
                  • 2014-12-14
                  • 1970-01-01
                  相关资源
                  最近更新 更多