在access中建了个查询,类似于存储过程,name= queryReportData
对日期类型参数传入string类型,过程内使用CDate函数来转换, 如下select Format(sum(t.pay_amount),'0.00')
from sell_report_info t
where t.pay_date >= CDate(@startDate) 
and t.pay_date <= CDate(@endDate)
and Format(t.fcd,'yyyy-mm-dd') = Format(now(),'yyyy-mm-dd')
and left(t.re,3) = ''''+[@uname] 
and t.order_status = @statusC#调用查询过程,实现代码如下 using (OleDbCommand cmd = new OleDbCommand("queryReportData", DBHelper.getConn()))
            {
                cmd.CommandType = CommandType.StoredProcedure;
                if (cmd.Connection.State != ConnectionState.Open)
                    cmd.Connection.Open();
                OleDbTransaction trans = null;                trans = cmd.Connection.BeginTransaction();
                cmd.Transaction = trans;
                
                cmd.Parameters.Add("@uname", OleDbType.VarWChar);
                cmd.Parameters.Add("@startDate", OleDbType.VarWChar);
                cmd.Parameters.Add("@endDate", OleDbType.VarWChar);
                cmd.Parameters.Add("@status", OleDbType.VarWChar);                cmd.Parameters["@uname"].Value = uname;
                cmd.Parameters["@startDate"].Value = startData;
                cmd.Parameters["@endDate"].Value = endDate;
                cmd.Parameters["@status"].Value = status;
                cmd.ExecuteNonQuery();                OleDbDataAdapter da = new OleDbDataAdapter(cmd);
                DataSet ds = new DataSet();
                try
                {
                    //填充ds
                    da.Fill(ds);
                    // 清除cmd的参数集合 
                    cmd.Parameters.Clear();
                    //返回ds
                    return ds;
                }
                catch
                {
                    throw;
                }
                finally {
                    trans.Commit();
                    //关闭连接,抛出异常
                    cmd.Connection.Close();
                }
            }
结果执行到cmd.ExecuteNonQuery();时抛出异常,标准表达式中的数据类型不匹配,
我把参数放进sql中查询是OK的,这个问题纠结了我两天了,请各位大神帮忙看看, 谢谢!accessc#winform

解决方案 »

  1.   


    select Format(sum(t.pay_amount),'0.00')
    from sell_report_info t
    where t.pay_date >= CDate(@startDate) 
    and t.pay_date <= CDate(@endDate)
    and Format(t.fcd,'yyyy-mm-dd') = Format(now(),'yyyy-mm-dd')
    and left(t.re,3) = ''''+[@uname] 
    and t.order_status = @statusAccess内有Format函数吗?还有CDate不知道你转换的结果是什么?我记得日期应该用#来格式化它,如果上面语句你在Access中使用,你可以先预览sql代码的结果是什么?
      

  2.   

    Access数据库不能自动获得当前时间now,是不是这个问题?你加个datetimepicker获得时间后,将值传入代码呢?我遇到过类似情况。