2013-01-18 145 views
2

我正在使用c#項目並使用winform。插入語句時插入錯誤

這裏的問題是查詢以前的工作,但現在它是不工作

這裏todaydate是一個datetimePicker被設置爲短日期格式 和我列的數據類型爲smalldatetime我得到錯誤的是

The conversion of a nvarchar data type to a 
    smalldatetime data type resulted in an out-of-range value. 
    The statement has been terminated. 

如果我有兩個日期時間選擇器一個日期和第二個時間然後我該如何插入?請你能指導我

回答

4

你」目前正在傳遞文本值,這意味着別的東西不得不將其解析爲日期。不要這樣做。既然你已經有了一個DateTimePicker,你應該只使用DateTime值提供:

cmd.Parameters.AddWithValue("@today", todaydate.Value); 

...或與特定類型(SqlDbType.SmallDateTime)先創建參數,然後使用todaydate.Value設置的值。重要的一點是避免字符串轉換。

只要有可能,您應該避免將值轉換爲文本。在儘可能多的時間內保持它們的「自然」形式(例如DateTime):在輸入時,解析爲自然形式,並且如果可以避免轉換爲字符串,那就這樣做!

+0

喬恩你能幫助我,如果我有兩個日期時間選擇器一個日期和第二個時間然後如何插入? –

+0

@shariq_khan:然後使用類似'datePicker.Value.Date + timePicker.Value.TimeOfDay'構造一個'DateTime'值。 –

+0

sir value.timeofday將返回當前時間或我在時間選擇器中設置的時間? –

5

AddWithValue從你傳遞的值中確定參數的數據類型。

在你的情況,你傳遞一個字符串,因此參數傳遞給數據庫作爲一個字符串而不是由數據庫預計日期時間

你應該改變該行

cmd.Parameters.AddWithValue("@today", todaydate.Value); 
+0

史蒂夫你能幫我一次嗎?我已更新我的問題。兩個日期時間選擇器然後該怎麼做? –

0

我認爲你的time7列在數據庫中是smalldatetime,你試圖給它分配一個string。我不建議。

嘗試用Add()這樣的方法;

command.Parameters.Add("@today", SqlDbType.SmallDatetime); 
command.Parameters["@today"].Value = todaydate.Value; 

,或者您可以使用AddWithValue()的也是這樣的;

cmd.Parameters.AddWithValue("@today", todaydate.Value); 
+0

謝謝先生,但todaydate.value結果日期和時間,但我有兩個日期時間選擇器一個日期和第二個時間我希望日期和時間去單細胞 –