我在Windows窗体上有文本框。对于其中一些,没有最初将被保存的日期。绑定到文本框的SQL字段的类型为:date。当我去保存新记录时,我得到一个System.Data.SqlTypes.SqlTypeException:
SqlDateTime溢出。必须在1/1/1753 12:00:00 AM和12/31/9999 11:59:59 PM之间。
如果我没有在日期字段中输入日期,如何保存此记录?
这是我正在使用的代码
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();
}
}
答案 0 :(得分: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
答案 1 :(得分:0)
您将其设置为新的DateTime,默认为DateTime.MinValue,即1/1/0000。尝试传入DBNull。
答案 2 :(得分:0)
您是否在sql表中将此日期字段设为可空?
我不确定,但这可能是您的问题
您可以使用以下内容使其可以为空(
)ALTER TABLE [TableName] ALTER COLUMN [ColumnName] INTEGER NULL
答案 3 :(得分:0)
我发现了这个问题。上面的语法有效。问题出在代码的ADD部分(未发布)。我认为这是更新部分