0

我在 Windows 窗体上有文本框。对于其中一些人来说,最初没有保存日期。绑定到文本框的 SQL 字段的类型为:日期。当我去保存一条新记录时,我得到一个 System.Data.SqlTypes.SqlTypeException:

SqlDateTime 溢出。必须介于 1753 年 1 月 1 日上午 12:00:00 和 9999 年 12 月 31 日晚上 11:59:59 之间。

当我还没有日期可以输入日期字段时,如何保存此记录?

这是我正在使用的代码

public static bool UpdateEngOrd(EngOrd oldEngOrd, EngOrd newEngOrd)
    {

        SqlConnection cnn = SqlDB.GetConnection();
        string strsql =
            "UPDATE EngOrd SET " +
            "filetype = @newfiletype, reqmeetdue = @newreqmeetdue " +               
            "WHERE eo = @oldeo";
        SqlCommand cmd = new SqlCommand(strsql, cnn);
        cmd.Parameters.AddWithValue("@newfiletype", newEngOrd.FileType);
        if (newEngOrd.ReqMeetDue == DateTime.MinValue)
            cmd.Parameters.AddWithValue("@newreqmeetdue", DBNull.Value);
        else
            cmd.Parameters.AddWithValue("@newreqmeetdue", newEngOrd.ReqMeetDue);
          cmd.Parameters.AddWithValue("@oldeo", oldEngOrd.EO);

        try
        {
            cnn.Open();
            int count = cmd.ExecuteNonQuery();
            if (count > 0)
                return true;
            else
                return false;
        }
        catch (SqlException ex)
        {
            throw ex;
        }
        finally
        {
            cnn.Close();
        }
    }
4

4 回答 4

1

试试这样

   Dim _Date As SqlDateTime
   _Date = SqlDateTime.Null

   If (IsDBNull(Me.txtBox.Value)) Then
      _obj.Date= _Date
      Else
      _obj.Date=Convert.ToDateTime(txtBox.Value)
   End If
于 2013-10-08T16:03:44.863 回答
0

您将其设置为新的 DateTime,默认为 DateTime.MinValue,即 1/1/0000。尝试传入 DBNull。

于 2013-10-08T15:57:04.750 回答
0

您是否使 sql 表中的此日期字段可以为空?

我不确定,但这可能是您的问题

您可以使用以下内容使其可为空

ALTER TABLE [TableName] ALTER COLUMN [ColumnName] INTEGER  NULL
于 2013-10-08T16:03:07.570 回答
0

我发现了这个问题。上面的语法有效。问题出在代码的 ADD 部分(未发布)。我以为是更新部分

于 2013-10-08T19:30:21.403 回答