【问题标题】:Force specific format for date or time in datagridview no matter what user entry format it is强制 datagridview 中日期或时间的特定格式,无论它是什么用户输入格式
【发布时间】:2018-10-01 13:28:26
【问题描述】:

我在 datagridview 中只有时间列我已将时间列格式设置为t,但使用参数化查询将其添加到数据库时出现错误

SqlDbType.Time 溢出。值“955.00:00:00”超出范围。必须 介于 00:00:00.0000000 和 23:59:59.9999999 之间。

这里是绑定参数的命令行

cmd.Parameters.Add(new SqlParameter("@START_TIME", SqlDbType.Time)).Value = DGV_PatientSessions.CurrentRow.Cells["DGV_PatientSessions_StartTime"].Value;

因为当用户以随机格式输入日期时,我需要知道如何强制 或将输入的格式覆盖为特定格式以避免此类问题

或者可能通过按摩改变用户以使用特定格式而不是抛出异常

【问题讨论】:

  • DateTime 在 .NET 或 SQL Server 中具有 no 格式。这是一个二进制值。配置您的 grid 以使用特定格式显示日期
  • 至于这个具体的错误,与格式无关。 time 字段包含一天中的时间,而不是时间间隔。它不能包含'955.00:00:00。您必须在代码中添加验证,以确保网格或数据表不包含无效值
  • @PanagiotisKanavos 我从 sql server 到 gridview 读取日期没有问题 我的问题是当用户在 datagridview 的单元格中输入一个值,然后将该值绑定到参数以将其存储在数据库中时
  • 顺便说一句,time 字段的正确类型是 TimeSpan
  • @PanagiotisKanavos 我会试试 TimeSpan 也许会有所帮助

标签: c# sql-server-2008-r2 .net-4.0


【解决方案1】:

这是一个示例,说明在尝试将其分配给 SQL 参数之前如何验证该单元格的值:

DateTime temp;
if (!DateTime.TryParse(DGV_PatientSessions.CurrentRow.Cells["DGV_PatientSessions_StartTime"].Value, out temp)
{
    MessageBox.Show("Start time is not a valid time");
    return;
}

如果通过此检查,您可以将其分配给参数。

【讨论】:

  • 该值已经是 DateTime,或者成功解析为大于 24 小时的值
猜你喜欢
  • 2018-03-17
  • 2020-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-15
  • 1970-01-01
  • 1970-01-01
  • 2021-11-30
相关资源
最近更新 更多