带有SQLite错误的实体框架:从存储提供程序的数据读取器读取数据时发生错误

本文关键字:数据 读取 错误 程序 存储 实体 SQLite 框架 带有 | 更新日期: 2023-09-27 18:09:13

我在c#的WPF应用程序中使用SQLite 1.0.89与EF 5 . net Framework 4.5在VS2013上。数据库大小不大,程序使用的表最多包含1000行。

使用

程序我经常发现这个错误:

从存储提供程序的数据读取器读取时发生错误。详情请参阅内部异常。

内部异常是:

{"库例程调用无序'r'nnot an error"}

其他时候内部异常是:

连接已关闭,语句已终止

又一次我发现:

未知错误'r'nno连接句柄可用

我找到这篇文章搜索:

平行。Foreach循环创建多个数据库连接抛出连接错误?

SQL Server CE数据库大小问题

但是没有人能解决我的问题。

程序所做的查询不是在循环内,而是在UI上按下按钮时执行的单个查询,但我注意到当我按下查询按钮很多时间更快时,错误发生得更频繁(不仅如此)。

另一件事。当通过属性而不是方法访问DB Context时,错误更经常发生(但也不仅仅是这样):

public List<Product> ProductList
{
get {
      return DBContext.Products.ToList();
    }
}

带有SQLite错误的实体框架:从存储提供程序的数据读取器读取数据时发生错误

这个问题是由多个线程使用同一个DBContext查询数据库引起的。

为每个线程使用不同的DBContext可以解决这个问题。在我的例子中,我使用Castle Windsor将DBContext注入到执行查询的类中。将DBContext的方式配置为每个线程一个,问题就解决了。

我在EF6.1中发生了这个错误,花了我一段时间才弄清楚发生了什么。简化了查询,它工作了,所以我想查询中一定发生了什么。发现我正在查询字符串并在int上传递比较值。一旦我改变了int。

Dim OpenOrder = (From p In context.CP_Carthead Where p.SessionID = MySessionInfo.Current.LeadID.ToString And p.CustomerID = LeadID And p.Deleted = False And p.PortalID = TenantID).OrderBy(Function(p) p.OrderID).FirstOrDefault OrderID = OpenOrder.OrderID

LeadID (my Session)是一个int类型。没有。tostring,我得到的错误在上面的帖子

我今天在一个生产应用程序上遇到了这个错误。

这是由于用户出于某种原因将程序及其依赖项安装在启用onedrive的文件夹上造成的。这引发了很多bug,包括这个。希望它能挽救某人的一天。

An unhandled exception occured.An error occurred while reading from the store provider's data reader. See the inner exception for details.   at System.Data.Entity.Core.Common.Internal.Materialization.Shaper`1.HandleReaderException(Exception e)
   at System.Data.Entity.Core.Common.Internal.Materialization.Shaper`1.StoreRead()
   at System.Data.Entity.Core.Common.Internal.Materialization.Shaper`1.SimpleEnumerator.MoveNext()
   at System.Data.Entity.Internal.LazyEnumerator`1.MoveNext()
   at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
   at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)