最近在T-SQL INSERT INTO語句中使用DateTime時出現問題。在一臺機器上工作良好,但可能無法在另一臺機器上工作,我想這與語言環境設置有關。T-SQL INSERT語句中的安全DateTime
因此,如果我有DateTime變量什麼是在SqlStatement字符串中使用它的安全方式,它將始終工作,無論本地系統設置如何?
感謝
最近在T-SQL INSERT INTO語句中使用DateTime時出現問題。在一臺機器上工作良好,但可能無法在另一臺機器上工作,我想這與語言環境設置有關。T-SQL INSERT語句中的安全DateTime
因此,如果我有DateTime變量什麼是在SqlStatement字符串中使用它的安全方式,它將始終工作,無論本地系統設置如何?
感謝
使用parameterizedINSERT
查詢。
很可能,您的代碼正在組裝SQL命令字符串。這也使得你的代碼容易受到SQL Injection的影響。
實際上,只有最安全的格式是YYYYMMDD。如果包含時間,唯一真正安全的格式是YYYY-MM-DDTHH:MM:SS [...] –
@Aaron:MSDN表示這是* unseparated * ISO8601。你的是分開的ISO8601。 – Jan
對於輸入文字,這似乎很清楚:http://msdn.microsoft.com/en-us/library/ms190977%28SQL.90%29.aspx我沒有看到YYYYMMDD HH:MM:SS在那裏提到所有。我也沒有看到你的格式在ISO 8601列在這裏:http://msdn.microsoft.com/en-us/library/ms180878.aspx –
無論你使用,你的存儲創建DateTime類型的參數,參數化的命令/存儲過程和.NET代碼在調用存儲(所以它分配。 NET和SQL將知道他們正在使用日期時間,並且絕不會混淆/交換日期和月份),或者在插入命令的頂部包含特定命令,然後使用此模式格式化所有數據時間字符串,例如:
SET DATEFORMAT dmy;
刪除了評論,認爲他們在TSQL中這樣做。只是注意到asp.net標籤。 –
另一個問題是SQL DateTime範圍比.NET DateTime範圍小_smaller_。 – Oded
@MartinSmith我看到的第一件事就是C#和ASP.NET標籤。然後我看到了你的評論,我想「我搞砸了嗎?」 :) –