浮沉与木
2018-05-14 02:53
采纳率: 75%
浏览 1.2k

关于EF+LINQ查询提示数据库状态已关闭的问题

上周5 运行程序是没有问题的 期间也就关机重启了一次 然后现在再运行就出现LINQ 查询不出来数据了,然后找到一个错误提示是 ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。。我很无奈
数据库连接是没问题的 就是在查询的时候提前关闭了
图片说明这是一个查询方法
图片说明声明
我使用另一个方法查询单条数据是没有问题的。就是用 Filter 这个方法会有问题。
17.00更新------经过一下午的摸索,解决了这个BUG。原因在评论区

  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

3条回答 默认 最新

  • 已采纳

    错误原因:
    连接的当前状态为已关闭。或者只创建了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

    已采纳该答案
    评论
    解决 无用
    打赏 举报
  • skdsxx 2018-05-14 07:54

    判断状态是否关闭,如果关闭执行打开

    评论
    解决 无用
    打赏 举报
  • 浮沉与木 2018-05-14 08:58

    这个是我公司给我的一个实习项目,让我做一个关于权限的框架。
    用的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 也进行了注入,删除了垃圾代码。

    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题