2011-03-14 121 views
2

我已經安排的方式,將符合格式YYYY-MM-DD HH字符串:mm:ss的 它可能看起來像這樣2010-20-12 13:30:00將字符串轉換爲smalldatetime

我需要插入到SMALLDATETIME這SQL Server中的列。列的格式是 yyyy-MM-dd HH:mm:ss

我需要字符串看起來像這樣2010-12-20 13:30:00否則SQL Server將得到月份和日期混淆。

感謝您的想法

回答

9

不要使用字符串開始將您的數據發送到SQL服務器。相反,請使用參數化的SQL語句,並在指定DateTime後讓驅動程序爲您完成工作。 (請參閱SqlCommand.Parameters文檔中的一個示例。)

這就是您應該如何處理幾乎所有值 - 尤其是那些由用戶輸入的值。除了不必擔心格式化,這將防止SQL注入攻擊。

使剛剛離開解析您輸入的字符串作爲DateTime,這是最好的DateTime.ParseExactDateTime.TryParseExact,完成取決於你是否要解析的故障是一個異常或沒有結果的任務。

+0

感謝您提供有關參數的提示。我在網絡應用程序中使用它們。這是一款需要將某些sqlite數據與網絡應用程序同步的移動設備,並且我沒有真正考慮過注入。 – Louis 2011-03-14 17:08:34

1

您不應該將其轉換爲字符串。使用參數化的sql查詢或存儲過程,只提供一個datetime對象作爲參數。 sql命令將處理插入就好了。

如果您只有字符串,可以使用DateTime.Parse和DateTimeFormatInfo將它變成日期時間(有關創建格式信息的幫助,請參閱this documentation)。

2

你可以嘗試這樣的事:

//First convert string to DateTime 
DateTime dt; 
dt = Convert.ToDateTime("2010-20-12 13:30:00"); 

//Second Convert DateTime to formatted string 
string t_time; 
t_time = dt.ToString("yyyy-dd-MM hh:mm tt"); 

HTH。

+0

這不是有效的方法:) – SubniC 2011-03-14 16:11:08

+0

OP問字面意思是「我需要字符串看起來像這樣2010-12-20 13:30:00」我不認爲我的答案是不好的向下投票:( – SubniC 2011-03-14 16:15:06

+2

對不起,你投了票。 – Louis 2011-03-14 17:05:43