2012-03-30 17 views
1

嘗試通過在條件中傳遞日期來檢索記錄,我通過使用日期時間選擇器發送日期,但在最後讀者不顯示任何記錄。如何在日期時間運行查詢colomn

我的日期時間轉換爲Convert(char(10),ext_date,101)仍然面臨同樣的問題。

string [email protected]"select * from extra_expense where CONVERT(char(10),ext_date,101) = @date"; 

sqlcommand = new SqlCommand(str,sqlconnection); 
sqlcommand.Parameters.Add("@date", SqlDbType.DateTime).Value = datetimepicker1.value); 
datareader = sqlcommand.ExecuteReader(); 
List<Projects> projects = new List<Projects>(); 
while (datareader.Read()) 
{ 

    Projects proj = new Projects(); 
    proj.expenseid = Convert.ToInt32(datareader.GetValue(0)); 
    proj.ProjectDate = Convert.ToDateTime(datareader.GetValue(1)); 

    projects.Add(proj); 

} 
datareader.Close(); 
return projects; 
+0

什麼是你所得到的錯誤? 'datetimepicker1.value'的價值是什麼?它是否是SQL格式? – 2012-03-30 11:00:39

+0

什麼是數據類型ext_date? - 在大多數情況下,你不需要強制轉換,但如果它是varchar類型,那很可能是全球化問題。 (yyyy-MM-dd vs yyyy-dd-MM或類似)。 – faester 2012-03-30 11:01:43

+0

你爲什麼要轉換'ext_date'?你已經檢查過數據庫中的完全匹配嗎? – MatBailie 2012-03-30 11:02:14

回答

1

您可以指定日期,如在T-SQL字符串,像這樣:

SELECT MyFields FROM MyTable 
WHERE StartDate >= '01-01-00' AND StartDate <= '12-31-00' 
+0

我不確定,但我認爲這隻適用於字符串的日期與數據庫中可能配置的某個模式匹配的情況。所以如果這個配置改變了,那麼這是行不通的。 – 2012-03-30 12:04:52

+0

在這種情況下,我相信你可以使用#語法:WHERE StartDate> =#2000-01-01#AND St​​artDate <=#2000-12-31# – 2012-03-30 12:13:03

0

你不應該投在表中的字段,你應該投的參數,以正確的類型。實際上,您已經在投射它,因爲參數被聲明爲datetime,但在您的查詢中,您正在強制將ext_date轉換爲char(10)。 試試這個:

string [email protected]"select * from extra_expense where ext_date = @date"; 

隨着

sqlcommand.Parameters.Add("@date", SqlDbType.DateTime).Value = datetime.Parse(datetimepicker1.value); 
+0

得到它解決的字符串str =「select * from extra_expense where CONVERT (varchar(10),ext_date,101)= @date「; sqlcommand.Parameters.Add(「@ date」,SqlDbType.DateTime).Value = DateTime.Parse(date); date是datetimepicker1.text – San 2012-03-31 04:10:26