Sql server SqlDateTime溢出异常

Sql server SqlDateTime溢出异常,sql-server,vb.net,Sql Server,Vb.net,我试图插入一个仅限时间的值,但出现以下错误 ex{“SqlDateTime溢出。必须介于1/1/1753 12:00:00 AM和12/31/9999 11:59:59 PM之间。”}系统。异常 从前端,使用“TimeEdit”控件和上下箭头选择时间。SQL Server中的表的字段设置为smalldatetime。我只需要储存时间。我使用以下命令将数据返回到应用程序 选择id,将(字符(5),timeFrom,8)转换为timeFrom,将(字符(5),timeTo,8)转换为timeTo

我试图插入一个仅限时间的值,但出现以下错误

  • ex{“SqlDateTime溢出。必须介于1/1/1753 12:00:00 AM和12/31/9999 11:59:59 PM之间。”}系统。异常
从前端,使用“TimeEdit”控件和上下箭头选择时间。SQL Server中的表的字段设置为smalldatetime。我只需要储存时间。我使用以下命令将数据返回到应用程序

选择id,将(字符(5),timeFrom,8)转换为timeFrom,将(字符(5),timeTo,8)转换为timeTo 来自dbo.Availability 其中id=@id 和dayName=@weekday

我怎样才能把时间只花在餐桌上

编辑~解决方案 根据Euardo和Chris的说法,我的解决方案是传递datetime字符串,而不是只传递时间字符串。我使用“g”将结果格式化


谢谢

SQL中没有时间,只有DateTime

出于您的目的,我将使用类似这样的方法来只返回时间部分

SELECT (GETDATE() - (CAST(FLOOR(CAST(GETDATE() as FLOAT)) AS DateTime)))
其中GETDATE()是要筛选的日期时间

在数据库中设置时间时,必须将“01/01/1901”或“01/01/1753”添加到时间中


在处理datetime时,不要使用CAST和Convert to varchar,这很慢。坚持浮点数运算

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

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

如果您只跟踪时间,请考虑将其存储在整数中,作为从午夜开始的偏移量,以您需要的任何粒度(秒、分钟、小时等)表示。然后,您可以在代码中使用适当的TimeSpan.From()方法将其转换为TimeSpan。要返回到另一种方式,可以使用TimeSpan.Total??如果需要,则截断。如果需要进行手动查询,可以编写一个SQL函数,将小时/分钟/秒转换为等效偏移量


与使用日期时间和选择任意日期相比,我更喜欢这样做,因为这样可以更清楚地显示字段的用途,从而减少混淆。

如何从前端应用程序“9:00AM”传递仅时间值并存储在smalldatetime列中?你不会。没有时间了。您必须将其与日期组合并存储日期时间。当然,如果他不是在2008年,或者不能改变专栏的类型,那也没用。我在2008年得到的最后一份CTP还没有。不过,通过不依赖于特定版本的数据类型,他会有更好的兼容性。我的解决方案是,你不应该将Euardos或Chris的答案标记为正确答案吗?是的,我也说过了。。。。还有额外的建议,我得到了一个该死的-1.Kasper-我做了mark Chris的…,你的盒子里有什么奔腾10?