2008-10-28 119 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函數,將小時/分鐘/秒轉換爲等效偏移量。

我更喜歡使用日期時間和選擇任意日期,因爲它使字段更清晰,減少了混淆。