簡體   English   中英

將DateTime解析為SQL Server的最佳方法

[英]Best way to parse DateTime to SQL server

我想知道什么是將DateTime對象解析到SQL服務器的最佳方法。

您在代碼中生成SQL的位置。

我總是使用像DateTime.Now.TolongDateString()這樣的東西並且取得了很好的效果,除了今天我得到了一個錯誤,它讓我思考。

System.Data.SqlClient.SqlException: Conversion failed when converting datetime from character string

那么每個人的想法和推薦是什么方式,無論有什么設置,都可以運行所有SQL服務器。

也許像DateTime.Now.ToString("yyyy/MM/dd")

只有2種安全格式

ISO和ISO8601

ISO = yymmdd

ISO8601 = yyyy-mm-dd Thh:mm:ss:mmm(無空格)(注意T)

另請參見此處: 為SQL Server設置標准DateFormat

我發現需要這種特定的格式:

DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ss.fff")

注意外殼和沒有任何空格。 根據Robyn Page的說法,這是一種普遍的方法。

為什么不參數化查詢並將DateTime值作為SQL DateTime輸入參數傳遞?

例如INSERT INTO SomeTable (Blah, MyDateTime) VALUES (1, @MyDateTime)

那你就可以肯定了。 即使您正在生成SQL,您應該能夠專門處理這個問題嗎?

您應該使用參數化查詢,並將DateTime對象作為SQL DateTime參數傳遞。

如果將DateTime解析為String ,則必須在應用程序服務器上處理數據庫服務器上的本地化設置。 這可能會導致一些令人討厭的驚喜,例如將日期視為美國格式,另一方面是英國。 字符串9/12/2000可以是9月12日或12月9日。 因此,在應用程序和數據庫之間進行交換時,請將數據保留在DateTime對象/類型中。

只有在將DateTime解析為String時才會顯示數據(GUI)。 但是,在解析時,應確保使用正確的本地化設置,以用戶期望的格式顯示它。

同樣的原則適用於其他數據類型,例如float 這個字符串的表示形式取決於語言環境,我想你在將它傳遞給數據庫時不會將float解析為String ,那么為什么要使用DateTime呢?

這個永遠不會失敗:DateTime.Now.ToString(“yyyyMMdd HH:mm:ss.fff”)

注意日期是否為DateTime.Min,因為SQL Server使用1700s作為開始時間本身。 我使用ISO日期時間格式:DateTime.ToString(“s”)但我沒有在非西方安裝上嘗試過。

例如

DateTime.Now.ToString("c")

insert into testtable values ('2009-01-22T15:08:13')

使用DateTime.ToString格式化(“yyyy-MM-dd HH:mm:ss:fff”)將與MS SQL Server日期/時間格式匹配。 (我相信SQL Server在識別略有不同的格式方面相當“聰明”,例如使用斜杠,但我個人成功地使用過它。)

編輯:正如評論者所指出的,這可能會在某些語言環境中被破壞。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM