允许null datetime进入数据库?

时间:2014-08-08 16:15:16

标签: c# sql sql-server datetime

我有两个日历日期选择控件,不是完成表单所必需的。但是,每当我尝试提交表单而不从日历控件中选择某些内容时,我就会一直收到此异常错误:

  

异常:SqlDateTime溢出。必须在1/1/1753 12:00:00 AM和12/31/9999 11:59:59 PM之间。

在数据库中,我的SQL表已设置为允许两个datetime字段都为空。

是否有办法允许这两个字段的空或空条目进入数据库而不会导致错误?

这是将表单信息保存到数据库的代码(我将其剪切为仅包含2个日期时间字段):

private void SaveCustomerInfo(int CustID)
    {
        int currentUserID = AbleContext.Current.UserId;

        string addQuery = "INSERT INTO Customers (TaxExemptDate, AuthDate) VALUES(@TaxExemptDate, @AuthDate)";

        try
        {
            using (SqlConnection cn = new SqlConnection(ConfigurationManager.ConnectionStrings["AbleCommerce"].ToString()))
            {
                cn.Open();
                SqlCommand cmd = new SqlCommand(addQuery, cn);
                cmd.Connection = cn;


                    cmd.Parameters.Add(new SqlParameter("@TaxExemptDate", TaxExemptDate.SelectedStartDate));

                    cmd.Parameters.Add(new SqlParameter("@AuthDate", AuthDate.SelectedStartDate));

                    _CustomerID = AlwaysConvert.ToInt(Request.QueryString["CustomerID"]);
                    int.TryParse(Request.QueryString["CustomerID"], out _CustomerID);
                    if (_CustomerID == 0)
                    {
                        cmd.CommandText = addQuery;
                    }

                    if (_CustomerID !=0)
                    {
                        cmd.Parameters.Add(new SqlParameter("@CustomerID", CustID));
                        cmd.CommandText = editQuery;
                    }

                    cmd.ExecuteNonQuery();
                    cn.Close();
                }
            }
            catch (Exception exception)
            {
                Logger.Warn("Admin\\People\\Customers\\EdutCustomer.aspx - SaveCustomerInfo", exception);

            }
    }

1 个答案:

答案 0 :(得分:8)

您没有传递null,而是通过SqlParameter传递DBNull.Value

cmd.Parameters.Add(new SqlParameter("@TaxExemptDate", TaxExemptDate.SelectedStartDate == null ? (Object)DBNull.Value : TaxExemptDate.SelectedStartDate));

cmd.Parameters.Add(new SqlParameter("@TaxExemptDate", TaxExemptDate.SelectedStartDate == DateTime.MinValue ? (Object)DBNull.Value : TaxExemptDate.SelectedStartDate));