项目场景:
使用PetaPoco轻量级ORM连接Sql Server数据库问题
引用:System.Data.SqlClient 连接Sql Server数据库的
问题描述:
频繁使用PetaPoco.Fetch查询,从而出现报错:已有打开的与此 Command 相关联的 DataReader,必须首先将它关闭
项目中使用查询代码:
petaPocoDatabase.Fetch<TransportTask>("select TaskStatus from TransportTask where Id=@0", MagicCode3)
原因分析:
上述异常是因为是因为.NET內部是使用DataReader作数据存取,DataReader用同一个Connection。Connection开启执行完操作后没有进行关闭,导致返回查询结果时报错。
总的来说就是一个Connection只能执行一次事务,没用一次必须关闭然后再开启。
解决方案:
1,设定ConnectionString加上MultipleActiveResultSets=true,但只适用于SQL 2005以后的版本
2.先读出放置在List中
例如将
var preObj = (from a in db.ArticleEAP
where a.ArticleID < id
orderby a.ArticleID descending
select new { a.ArticleID, a.ArticleTitle })
改为
var preObj = (from a in db.ArticleEAP
where a.ArticleID < id
orderby a.ArticleID descending
select new { a.ArticleID, a.ArticleTitle }).ToList()
ToList之后就被读到内存中了,与DataContext脱钩了!
出自:已有打开的与此 Command 相关联的 DataReader,必须首先将它关闭。_Small_nie-CSDN博客_已有打开的与此command相关联的datareader