我有類似下面的代碼:爲什麼在使用帶有日期參數的SqlCommand時會出現超時?
DateTime startDate = new DateTime(2010, 12, 1);
DateTime endDate = new DateTime(2011, 12, 1);
string sql = "SELECT * FROM SomeTable WHERE SomeDateColumn BETWEEN @StartDate AND @EndDate";
using (var connection = new SqlConnection(_connString))
using (var command = new SqlCommand(connection)) {
command.Parameters.AddWithValue("@StartDate", startDate.Date);
command.Parameters.AddWithValue("@EndDate", endDate.Date);
using (var reader = command.ExecuteReader()) {
// filling up some objects...
}
}
此超時。
只需通過更改SQL查詢以明文形式包含日期,查詢就可以正常運行。
string sql = "SELECT * FROM SomeTable WHERE SomeDateColumn BETWEEN '" + startDate.ToString("yyyy-MM-dd") + "' AND '" + endDate.ToString("yyyy-MM-dd") + "'";
使用VS2010查詢連接,這兩個查詢運行速度快,但只要我嘗試它在我的程序,第一個失敗,因爲它超時。
對這種行爲有解釋嗎,還是我錯過了什麼?
SomeDateColumn是什麼列類型?因爲你在發送「日期」,但是當查詢解析器解析'YYYY-MM-DD'時,它可能會將它解析爲DateTime,這可能會影響你的索引?只是一個長鏡頭。然而,如果索引是基於另一種數據類型的話,最理想的情況是能夠轉換日期。 – jishi
啓動sql分析器並查看正在執行的查詢。 – Pleun
@jishi - 列類型是'datetime'。 – jovnas