上周5 运行程序是没有问题的 期间也就关机重启了一次 然后现在再运行就出现LINQ 查询不出来数据了,然后找到一个错误提示是 ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。。我很无奈
数据库连接是没问题的 就是在查询的时候提前关闭了这是一个查询方法
声明
我使用另一个方法查询单条数据是没有问题的。就是用 Filter 这个方法会有问题。
17.00更新------经过一下午的摸索,解决了这个BUG。原因在评论区
错误原因:
连接的当前状态为已关闭。或者只创建了Connection对象,没有调用
Connection.Open()方法;
也就是:connection.State != ConnectionState.Closed
解决方法:
调用Connection.Open()方法;
或者添加判断,例如下面的代码:
if (MyIni.Gs_con.State != ConnectionState.Closed)
{
OleDbCommand mysc = new OleDbCommand(sqltext, MyIni.Gs_con);
//tools.MB(sqltext);
result = tools.fieldnullint(mysc.ExecuteScalar());
if (result == 0) return false;
}
https://blog.csdn.net/testcs_dn/article/details/47681027
判断状态是否关闭,如果关闭执行打开
这个是我公司给我的一个实习项目,让我做一个关于权限的框架。
用的DDD思想进行开发。表示对于新手来说 难度不小。
然后上周的时候用户查询整个流程是可以跑通的,虽然写了不少垃圾代码出来,毕竟还在摸索。
今天上午运行代码的时候 就开始出错,程序是没有报错的, linq 查询也有返回的是 IQueryable类型的结果,我是想将它转换成集合。
于是在应用层就有了
public IList<Users> GetUser()
{
return _userdb.Find(p => p.Id != null) as IList<Users>;
}
这样的操作。 就是这里的代码错了。
IQueryable 类有自带的toList() 方法,并不需要强制转换成IList, IList方法是继承了IEnumerable 这里的错误就是
IQueryable和IEnumerable 这两个类的区别导致。详细的区别可以查一下资料。
然后优化了一下代码 将 DbContext 也进行了注入,删除了垃圾代码。