6

我正在开发一个具有 DateTime 字段的项目。

在其中,考虑到日期不是必填字段,我使用 jQuery 让用户选择日期格式“dd/MM/yyyy”。

如何保存 WebMatrix 和 Razor 中不需要的 DateTime 字段?

我试图做这样的事情:

我只放了我认为对完成代码很重要的代码,可以在这里找到

@{
//Get data
string TaskForecastCompletion= Request["txtForecastCompletion"];
string TaskCompletedIn= Request["txtCompletedIn"];

                    DateTime dtForecastCompletion = default(DateTime);
                    if (!Request["txtForecastCompletion"].IsEmpty() && !DateTime.TryParse(Request["txtForecastCompletion"], out dtForecastCompletion))
                    {
                            ModelState.AddError("PrevisaoFinalizacao", "Data de previsão de finalização é inválida. Formato: dd/mm/aaaa");
                    }


                                    sql = @"update Tasks set Title = @0 ,Description = @1 ,ProjectID = @2 ,ForecastCompletion = @3 ,RequestBy = @4 ,CompletedIn = @5 ,Modified = getdate() ,Priority = @6 where ID = @7";
                                    db.Execute(sql, TaskTitle,TaskDescription, ProjectID, dtForecastCompletion, TaskRequestBy, dtTaskCompletedIn, TaskPriority, TaskID);
}

尝试更改时出错

转换为日期时间时发生溢出。说明:执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。

异常详细信息:System.Data.SqlServerCe.SqlCeException:转换为日期时间时发生溢出。

源错误:

第 62 行:{ 第 63 行:
sql = @"更新任务集 Title = @0 ,Description = @1 ,ProjectID = @2 ,ForecastCompletion = @3 ,RequestBy = @4 ,CompletedIn = @5 ,Modified = getdate() ,优先级 = @6 其中 ID = @7"; 第 64 行:
db.Execute(sql, TaskTitle,TaskDescription, ProjectID, dtForecastCompletion, TaskRequestBy, dtTaskCompletedIn, TaskPriority, TaskID); 第 65 行:
} 第 66 行:

4

2 回答 2

4

如果数据库中的日期字段可以为空(未标记为 NOT NULL),则可以将 C# 中的数据类型更改为可以为空的 DateTime

 DateTime? dtForecastComplete = null;

现在您可以向/从数据库传递(和检索)空值。

于 2011-02-28T14:53:25.767 回答
0

如果您想要“快速而肮脏”的解决方案,我会插入DateTime.MinValue初始值,并在再次显示时对其进行测试以使其为空。

当然,更好的方法是动态构建插入语句和值列表,如果值为空,则将其从列表中排除。

于 2011-02-28T14:43:53.950 回答