[EF报错]另一个 SqlParameterCollection 中已包含 SqlParameter

封装分页查询的时候为了防止sql注入,使用SqlParameter来传递参数

queryParameter.Count = Convert.ToInt32(DbContext.Database.ExecuteScalar(sqlpage, param.ToArray()));
strsql.Append($@" order by {queryParameter.sidx} {queryParameter.sord} offset {(queryParameter.pageNum - 1) * queryParameter.pageSize} rows fetch next {queryParameter.pageSize} rows only");
return Query<TEntity>(strsql.ToString(), param.Select(x=>((ICloneable)x).Clone()).ToArray()).AsQueryable();

程序走到return的时候抛出异常: 另一个 SqlParameterCollection 中已包含 SqlParameter
原因是:垃圾回收机制并没有将IDbCommand临时对象即时的回收,而且该对象绑定的Parameter集合也存在,所以导致出现两个SqlParameter
解放方案:在第二次执行sql之前释放清空SqlParameter

return Query<TEntity>(strsql.ToString(), param.Select(x=>((ICloneable)x).Clone()).ToArray()).AsQueryable();

[EF报错]另一个 SqlParameterCollection 中已包含 SqlParameter

上一篇:Oracle数据库的左 右 全连接与(+)的用法


下一篇:Mysql-zking