【EF框架】另一个 SqlParameterCollection 中已包含 SqlParameter。
查询报表的时候需要通过两次查询取出数据。
第一次,用count(*)查出总数;
第二次,用rownumber分页取出想要的页内容;
为了防止sql注入,使用SqlParameter来传递参数
var param = new List<SqlParameter>(); param.Add(new SqlParameter("@StartTime", DateTime.Parse(req.StartTime))); param.Add(new SqlParameter("@EndTime", DateTime.Parse(req.EndTime)));
1
_ctx.Database.SqlQuery<int>(_sql, param.ToArray()).FirstOrDefault();
2
_ctx.Database.SqlQuery<ReceiveSummeryItem>(_sql, param.ToArray()).ToList();
但是第二次竟然报错:
另一个 SqlParameterCollection 中已包含 SqlParameter。
百度出来的一大堆结果都是给出的如下解决方案,然并卵
SqlCommand cmd = new SqlCommand(); using (SqlConnection conn = new SqlConnection(connDBStr)) { PrepareSqlCommand(cmd, conn, null, sql, cmdParms); SqlDataAdapter da = new SqlDataAdapter(cmd); DataTable dt = new DataTable (SetSqlAsDataTableName(sql)); da.Fill(dt); cmd.Parameters.Clear();//多了这一句,就解决了问题 return dt; }
浪费感情。。。
只好用google搜索
最后在 stackoverflow 中发现了如下提问,真是如出一辙
代码优化成了clone之后好了。
_ctx.Database.SqlQuery<ReceiveSummeryItem>(_sql, param.Select(x => ((ICloneable)x).Clone()).ToArray()).ToList();
搞定!
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步