已有打开的与此 Command 相关联的 DataReader,必须首先将它关闭。

  1/同时打开两个或循环多个sqldatareader会出现以上错误。因为用的是sqldatareader做数据库的数据读取,sqlconnection开启没有关闭。

    上网查了一下,一个SqlConnection只能执行一次事务,没用一次必须关闭然后再开启。上面我只用了一次没有关闭,直接开启所以会报错。其实不用多次打开在开启,那样实现起来很麻烦。直接在连接字符串的后面加上MultipleActiveResultSets=true即可。 如有配置文件直接修改配置文件即可。


2/

已有打开的与此 Command 相关联的 DataReader,必须首先将它关闭

在运用Linq to sql 或者 linq to entity等相关linq技术进行数据库访问操作时,如果发生上述异常是因为是因为.NET內部是使用DataReader作数据存取,DataReader用同一个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脱钩了!


感谢原文作者的贡献

你可能感兴趣的:(C#)