2011-09-08 88 views
0

我在ASP.net C#以下SQL Server錯誤:轉換varchar數據類型到一個日期時間數據類型的導致外的範圍內的值

varchar數據類型的所述的轉化率日期時間數據類型導致 處於超出範圍的值。

我的SQL查詢:

string query = @"update Conference set Conference_name='" 
    + name + "',AIMS='" + AIMS + "',Scope='" + scope 
    + "',Submission_Deadline='" + submissionDay 
    + "',Notification_Deadline='" + notificationDay 
    + "',Camera_Ready_submission='" + cameraReadyDay 
    + "',Early_authors_registration='" + earlyAuthorsDay 
    + "',Start_Date='" + startDay + "',End_Date='" + endDay 
    + "',Location='" + location 
    + "' where Conference_ID= '" + id+"'"; 
+0

您可以輸出變量query的內容而不是執行它,並將其發佈到此處? –

+0

@emilios:startDay和endDay變量的數據類型和您使用的日期格式是什麼?題外話題:不要使用硬編碼的字符串。使用參數化查詢。 – adatapost

+2

我希望這些數據都不是來自回傳值或用戶輸入的數據。你應該使用參數化查詢,它也有助於解決像這樣的一些問題。如果任何數據來自服務器外的任何地方,那麼SQL注入攻擊已經成熟。 –

回答

1

也許是時候添加一些驗證。我可以建議RangeValidatortype設置爲日期嗎?

+0

並注意Sql datetime的有效範圍與.net datetime的範圍不同。具體而言,.net datetime.MinValue小於Sql的datetime最小值。你可以和C#中的SqlDateTime.MinValue進行比較。 – DevDelivery

0

您的日期值之一,可能會開始或結束日期不能被轉換爲datetime。將有助於查看數據。

1

我認爲你的查詢是好的,這是你的數據是不好的。其中一個日期字段(startDay,EndDay,NotificationDay)看起來不像有效的日期。

0

這與c#ToString()行爲有關。由於應用程序的「文化」,ToString()方法默認爲一個值。

由於您的應用程序文化設置,「2011年1月13日」可能會字符串化爲「2011-01-13」或「2011-13-01」。

這可能會導致錯誤,當試圖找到13個月的一年。

爲了解決這個問題,我建議使用的SqlCommand和設置參數...

請參閱http://www.knowdotnet.com/articles/dynamicsqlparameters.html

例子可以很容易地轉換爲C#。

相關問題