c#+access开发问题 for 标准表达式中的数据类型不匹配
在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.remark,3) = ''''+[@uname]
and t.order_status = @status
C#调用查询过程,实现代码如下
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的,这个问题纠结了我两天了,请各位大神帮忙看看, 谢谢! access c# winform --------------------编程问答--------------------
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.remark,3) = ''''+[@uname]
and t.order_status = @status
Access内有Format函数吗?还有CDate不知道你转换的结果是什么?我记得日期应该用#来格式化它,如果上面语句你在Access中使用,你可以先预览sql代码的结果是什么? --------------------编程问答-------------------- Access数据库不能自动获得当前时间now,是不是这个问题?你加个datetimepicker获得时间后,将值传入代码呢?我遇到过类似情况。 --------------------编程问答-------------------- 这个问题不是很清楚
补充:.NET技术 , C#