2008-10-28 79 views
1

我试图插入时间唯一的价值,但收到以下错误SQLDATETIME溢出异常

  • 前{“SQLDATETIME溢出。必须是AM 1753年1月1日12:00:00之间12/31/9999下午11点59分59秒。TimeEdit‘控制“}的System.Exception

从前端,时间,使用所选择的’,与向上和向下箭头。 SQL Server中的表具有设置为smalldatetime的字段。我只需要存储时间。我用下面将数据返回到应用程序

选择ID,CONVERT(CHAR(5),timeFrom,8)作为timeFrom,CONVERT(CHAR(5),timeTo,8)作为timeTo FROM dbo.Availability 其中id = @id 和dayName = @weekday

如何将时间只传递给表?

编辑〜解决方案 根据Euardo和Chris的说法,我的解决方案是传递日期时间字符串而不是时间字符串。我使用“g”按照Time Format格式化了我的结果。

谢谢

+0

您不应该将Euardos或Chris的答案标记为正确答案吗? – Kasper 2008-10-28 18:03:18

+0

是的,我也是这么说的......并有了额外的建议,我得到了一个friggn -1。 – StingyJack 2008-10-28 18:18:51

+0

Kasper-我确实记得Chris的......你在那个盒子里有什么Pentium 10? – 2008-10-31 03:52:15

回答

1

选择一个在该范围内(即1/1/1970)的日期并将其用于您插入的所有内容。

-1

有没有这样的事情在SQL中的时间,只有DateTime。

为了您的目的,我会使用类似的东西来仅返回时间部分。

SELECT (GETDATE() - (CAST(FLOOR(CAST(GETDATE() as FLOAT)) AS DateTime))) 

其中,GETDATE()是您要过滤的日期时间。

在数据库中设置时间时,必须在时间上添加'01/01/1901'或'01/01/1753'。

在使用datetime时,不要使用CAST并转换为varchar,因为它的速度很慢。坚持浮动数值操作。

3

您可以将日期设置为1/1/1753这是MSSQL中日期时间的日期最小值,然后添加要存储的小时。当然,每当你需要获得价值时你都必须考虑这一点,但你可以用一些助手来包装。 或者您可以使用MSSQL 2008并使用新的TIME数据类型。

0

如果您只关注时间,请考虑将它存储在int中作为您需要的任何细节(秒,分钟,小时......)与午夜的偏移量。然后,您可以使用适当的TimeSpan.From ??()方法将其转换为代码中的TimeSpan。要回到其他方式,你可以使用TimeSpan.Total?并在需要时截断。如果您需要手动查询,则可以编写一个SQL函数,将小时/分钟/秒转换为等效偏移量。

我更喜欢使用日期时间和选择任意日期,因为它使字段更清晰,减少了混淆。