2012-03-30 65 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