【发布时间】:2015-10-31 15:40:21
【问题描述】:
我使用此代码按日期字段过滤表(在表中) 这是我的代码:
public double Mounthcost()
{
DateTime today = DateTime.Now;
PersianCalendar persianCalendar = new PersianCalendar();
int yearPersian = persianCalendar.GetYear(today);
int monthPersian = persianCalendar.GetMonth(today);
DateTime firstDayOfMonth = persianCalendar.ToDateTime(yearPersian, monthPersian, 1, 0, 0, 0, 0);
int daysInMonth = persianCalendar.GetDaysInMonth(yearPersian, monthPersian);
DateTime lastDayOfMonth = firstDayOfMonth.AddDays(daysInMonth - 1);
//try
//{
SqlDataReader DR = ExecuteReader(System.Data.CommandType.Text, "Select Sum(Price) From Tbl_Cost Where Dat Between" + firstDayOfMonth + "AND" + lastDayOfMonth);
if (DR.Read())
{
Mouth_Cost = Double.Parse(DR[0].ToString());
}
return Mouth_Cost;
//}
//catch
//{
// return 0;
//}
}
这个错误:
在预期条件的上下文中指定的非布尔类型的表达式,在 'between10' 附近。
【问题讨论】:
-
在构建查询时尝试在日期中添加单引号:
between '" + firstDayOfMonth + "' and '" +。您确实应该使用参数化查询,或者至少将日期/时间显式转换为字符串。请注意,使用参数消除了数据库以与 .NET 不同的方式解释字符串日期的问题,即“10/5/15”十月还是五月?然后就是将 sum 从数字数据类型转换为字符串,然后解析为 double 的奥秘。
标签: c# tsql filter sqldatareader