select * from Sheet where 姓名='焦鹏飞' and datediff(M,日期时间,'2013/4/22') = 0
我VS SQL Sever 中使用上述 查询语句 执行成功,但是我在C#中提示:
在将 nvarchar 值 'datediff(M,日期时间,'2013/4/22') = 0' 转换成数据类型 int 时失败。
请问这为啥?那里错了?

解决方案 »

  1.   

    +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++   
     wherelist.Add("姓名=@Name");
                    sqlparams.Add(new SqlParameter("@Name",names[i]));
                    wherelist.Add("@Date=0");
                    sqlparams.Add(new SqlParameter("@Date","datediff(M,日期时间," +"'"+dt.ToShortDateString()+"'"+ ") = 0"));
                    string sql = "select * from sheet";
                    string sqlwhere = string.Join(" and ", wherelist);
                    if (sqlwhere.Length > 0)
                    {
                        sqlwhere = " where " + string.Join(" and ", wherelist);
                        sql = sql +sqlwhere;
                        MessageBox.Show(sql);
                    }
                    new AttendanceDAL().Generation(sql,sqlparams);
    +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++       
     public void Generation(string sql, List<SqlParameter> paramters)
            {
                DataTable table = SqlHelper.ExecuteDataTable(sql, paramters.ToArray());//上午
                for (int i = 0; i < table.Rows.Count; i++)
                {
                    DataRow row = table.Rows[i];            }
      

  2.   

     wherelist.Add("@Date=0");
    多了=0
      

  3.   

    楼上的回答太不专业了,我找到问题了,问题是:"datediff(M,日期时间1,日期时间2),dateiff 函数C#中没有,参数带的话没法代。
      

  4.   

    蛋疼的...代码
    wherelist.Add("@Date=0");  <-参数应该为 int
    sqlparams.Add(new SqlParameter("@Date","datediff(M,日期时间," +"'"+dt.ToShortDateString()+"'"+ ") 
    = 0")); <- 实际参数是 varchar 
    当然报错..
    老老实实拼sql语句吧
    别乱用
      

  5.   


    我的意思去掉"=0" 就是把你的@Date 转换为 数据库的操作 datediff是数据库的操作 而且你之前也说了在数据库中那语句成功了 现在只是把@Date 放到数据库中 而不是在C#里面操作datediff