2015-10-31 35 views
-1

我使用此代码由日期字段筛选表(表)的表此我的代码:误差滤波器 基于日期字段

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'附近。

+0

尝试建立查询时添加单引号日期:'之间“‘+ firstDayOfMonth +’”和' “+”。你真的应该使用参数化查询,或者至少明确地将日期/时间转换为字符串。注意,使用参数将以与.NET不同的方式解析字符串日期的问题,即“ 10/5/15“十月或五月?然后将总和从一个数字数据类型转换为一个字符串然后解析为一个字符串的奥秘。 – HABO

回答

1

感谢哈勃:) 使用本:

SqlDataReader DR = ExecuteReader(System.Data.CommandType.Text, "Select Sum(Price) From Tbl_Cost Where Dat Between @F AND @L", new SqlParameter[] 
      { 
       new SqlParameter("@F", firstDayOfMonth), 
       new SqlParameter("@L", lastDayOfMonth), 
      } 

是正确的......

2

你缺少的空间在您的SQL查询

SqlDataReader DR = ExecuteReader(System.Data.CommandType.Text, "Select Sum(Price) From Tbl_Cost Where Dat Between " + firstDayOfMonth + " AND " + lastDayOfMonth); 

公告and和之后的空间。

+0

谢谢亲爱的Paulose ...但是同样的错误 –

+0

@ghasemdeh错误是否一样?如果没有,你可以发布新的错误信息。 –