![](/img/trans.png)
[英]Best way to export SQL Server database to sqlite (or SQL Server Compact)
[英]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.