【问题标题】:Saving DateTime with WebMatrix and Razor使用 WebMatrix 和 Razor 保存日期时间
【发布时间】:2011-07-05 19:54:31
【问题描述】:

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

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

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

我试图做这样的事情:

我只放了我认为是的代码 重要的完成代码即可 找到here

@{
//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);
}

尝试更改时出错

转换时发生溢出 到日期时间。说明:一个 期间发生未处理的异常 当前网络的执行 要求。请查看堆栈跟踪 有关错误的更多信息 以及它起源于代码的位置。

异常详情: System.Data.SqlServerCe.SqlCeException: 转换时发生溢出 到日期时间。

来源错误:

第 62 行:{ 第 63 行:
sql = @"更新任务集标题 = @0 ,描述 = @1 ,项目 ID = @2 ,ForecastCompletion = @3 ,RequestBy = @4 ,CompletedIn = @5 ,修改 = getdate() , 优先级 = @6 其中 ID = @7";第 64 行:
db.执行(sql, 任务标题、任务描述、项目 ID、 dtForecastCompletion、TaskRequestBy、 dtTaskCompletedIn,任务优先级, 任务ID);第 65 行:
} 第 66 行:

【问题讨论】:

  • 请在代码块中发布错误,不要终止换行符。

标签: c# asp.net razor webmatrix sql-server-ce-4


【解决方案1】:

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

 DateTime? dtForecastComplete = null;

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

【讨论】:

  • 在我的代码中,我使用 TryParse DateTime 类,它不接受可为空的。看看它是如何改变这个link 中的代码的。放个存档就行了。 错误:“转换为日期时间时发生溢出。说明:执行期间发生未处理的异常,同时转换为日期时间。”
  • 我添加了一个辅助变量以便使用 TryParse 仍然出现上面的错误。
  • 这些是我在下面提到的问题。如果您一开始没有使用可为空的 DateTime,则必须更改整个项目。这就是为什么在大多数情况下,“快速而肮脏”的解决方案是一种很好的节省时间的解决方法。
  • 本项目仅供学习,有几页。改变整个项目不是问题。
【解决方案2】:

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

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

【讨论】:

  • 有什么方法可以用 null 代替 Min?
  • GvS 为您回答了这个问题 ;-) 请确保在整个应用程序中更改 DateTime 字段的 DataType,否则您将遇到构建错误。
  • 使用转换:"db.Execute(sql paramters {}"
  • 使用括号 '[' ']' 中的字段之一进行查询有何作用。示例:var db = UserHelper.DatabaseInstance; db.query(@"INSERT INTO Events(OrganizerId, CalendarId, Name, Description, Location, AllDay, Start, [End]) 值(@0,@1,@2,@3,@4,@5,@6 , @ 7) ", userId, calendarId, name, description, location, allday, utcStart, utcEnd);
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-25
  • 1970-01-01
  • 2021-09-10
  • 2011-04-28
  • 2013-08-04
  • 1970-01-01
相关资源
最近更新 更多