文章内容

2017/7/28 15:00:26,作 者: 黄兵

执行命令定义时出错。有关详细信息,请参阅内部异常

最近在处理一些问题的时候,出现了错误,提示如下:

{"执行命令定义时出错。有关详细信息,请参阅内部异常。"}


之后看了一下内部错误,提示如下:

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


出错代码如下所示:

using (UnitOfWork uow = new UnitOfWork())
            {
                var getBlogItem = uow.BlogRepository.GetAll().Where(x => x.Id < 645);
                foreach (var item in getBlogItem.Select(x => x.Id))
                {
                    try
                    {
                        //单个查询
                        Blog blogModel = new Blog();
                        blogModel.Id = getBlogItem.Where(x => x.Id == item).FirstOrDefault().Id;
                        blogModel.Title = getBlogItem.Where(x => x.Id == item).FirstOrDefault().Title;
                        blogModel.Body = getBlogItem.Where(x => x.Id == item).FirstOrDefault().Body;
                        blogModel.CreationTime = getBlogItem.Where(x => x.Id == item).FirstOrDefault().CreationTime;
                        SearchIndexManager.GetInstance().AddQueue(blogModel.Id.ToString(), blogModel.Title, blogModel.Body, blogModel.CreationTime);
                        ViewData["info"] = @"<div class='alert alert-success alert-dismissable'>\r\n<button aria-hidden='true' data-dismiss='alert' class='close' type='button'>×</button>\r\n 建立索引成功! <a class='alert-link' href='notifications.html#'>了解更多</a>.</div>";
                    }
                    catch (Exception ex)
                    {
                        ViewData["info"] = @"<div class='alert alert-danger alert-dismissable'>\r\n<button aria-hidden='true' data-dismiss='alert' class='close' type='button'>×</button>\r\n 建立索引失败! <a class='alert-link' href='notifications.html#'>了解更多</a>.</div>";
                    }
                }
            }
            return View();

这个看着没有什么问题,但是仔细分析之后在循环之前没有将其读出来,也没有关闭连接,才出现了这样的错误提示:

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

解决方案:

using (UnitOfWork uow = new UnitOfWork())
            {
                var getBlogItem = uow.BlogRepository.GetAll().Where(x => x.Id < 645).ToList();
                foreach (var item in getBlogItem.Select(x => x.Id))
                {
                    try
                    {
                        //单个查询
                        Blog blogModel = new Blog();
                        blogModel.Id = getBlogItem.Where(x => x.Id == item).FirstOrDefault().Id;
                        blogModel.Title = getBlogItem.Where(x => x.Id == item).FirstOrDefault().Title;
                        blogModel.Body = getBlogItem.Where(x => x.Id == item).FirstOrDefault().Body;
                        blogModel.CreationTime = getBlogItem.Where(x => x.Id == item).FirstOrDefault().CreationTime;
                        SearchIndexManager.GetInstance().AddQueue(blogModel.Id.ToString(), blogModel.Title, blogModel.Body, blogModel.CreationTime);
                        ViewData["info"] = @"<div class='alert alert-success alert-dismissable'>\r\n<button aria-hidden='true' data-dismiss='alert' class='close' type='button'>×</button>\r\n 建立索引成功! <a class='alert-link' href='notifications.html#'>了解更多</a>.</div>";
                    }
                    catch (Exception ex)
                    {
                        ViewData["info"] = @"<div class='alert alert-danger alert-dismissable'>\r\n<button aria-hidden='true' data-dismiss='alert' class='close' type='button'>×</button>\r\n 建立索引失败! <a class='alert-link' href='notifications.html#'>了解更多</a>.</div>";
                    }
                }
            }
            return View();

加了一个.ToList(),具体的说明看这里Enumerable.ToList 方法

问题解决,有什么问题给我在下面留言。

黄兵的个人博客原创。

转载请注明出处:黄兵的个人博客 - 执行命令定义时出错。有关详细信息,请参阅内部异常

参考资料:

EF 更新条目时出错。有关详细信息,请参见内部异常。

aerkate 关于报错”已有打开的于此Command相关联的DataReader,必须首先将它关闭。“的问题

Enumerable.ToList 方法

Linq之ToList

分享到:

发表评论

评论列表