【发布时间】:2011-07-15 04:03:24
【问题描述】:
如何在 C#.NET 中使用 SQL Server 2008 中引入的 SQL time 数据类型?
我一直在尝试让它工作,但没有成功。
【问题讨论】:
-
哪个答案解决了您的问题? LHS 上有一个接受复选标记。
标签: c# .net sql sql-server time
如何在 C#.NET 中使用 SQL Server 2008 中引入的 SQL time 数据类型?
我一直在尝试让它工作,但没有成功。
【问题讨论】:
标签: c# .net sql sql-server time
这是一个MSDN article,它回顾了 SQL Server 2008 中针对 ADO.NET 引入的所有新日期和时间数据类型。正如文档所说:对于System.Data.DbType.Time,您将使用.NET Framework 类型System.TimeSpan
【讨论】:
我认为您可以使用 TimeSpan 数据类型来达到您的目的。
这是一个 article,它解释了在 ADO.NET 中使用 Time 数据类型。
【讨论】:
即使是微软的人也倾向于建议将 sql 数据类型 time 映射到 System.Timestamp 我不建议这样做,
因为sql时间的范围是00:00:00.0000000 - 23:59:59.9999999
而 System.TimeSpan 的范围是 10675199.02:48:05.4775808 - 10675199.02:48:05.4775807
这只是略有不同,可能会导致严重的运行时超出范围错误。
【讨论】:
您可以使用类似于以下语句的数据阅读器读取它。
TimeSpan time = dr.GetTimeSpan(dr.GetOrdinal(“Time7FieldName”));
【讨论】:
您如何访问数据?使用实体框架、StoredProcedures 等
如果您必须传递日期的字符串表示形式,请确保以“yyyy-mm-dd hh:mm:ss”格式进行传递,否则您将面临 dd/mm/yyyy vs mm/dd/ 的风险yyyy混乱。
如果您使用的是实体框架或数据集,那么您应该只将参数传递给 DataTime 实例,例如 DateTime.Now
【讨论】:
如果您的字段及时,您可以简单地使用 (Timespan) 进行投射,
while (reader.Read())
{
TimeSpan DBStartTime = (TimeSpan)reader["StartTime"];
TimeSpan DBEndTime = (TimeSpan)reader["EndTime"];
}
【讨论】: