MySQL 运行正常 - SQLite 抛出 ObjectDisposedException

MySQL runs fine - SQLite throws ObjectDisposedException

我正在为 Windows Mobile Handheld 6.5.3 设备开发程序(注意:紧凑的框架!)。该应用程序主要为 MySQL 构建。因为我希望能够使用不同的数据库,所以我认为工厂方案是最好的方法。

所以我根据教程 (http://www.c-sharpcorner.com/UploadFile/db2972/factory-design-pattern/) 制作了一个数据库工厂并重写了大部分数据库部分,以便它使用正确的接口方法。

执行查询如下所示(简化):

using (conn)
  using (cmd)
  {
    conn.Open();
    // Prepare query and stuff
    //..
    // Fetch results
    conn.Close();
    // check result
    return result;
  }
}

根据第一个查询的结果,有一个数据库查询链。将我的应用程序与 MySQL 一起使用是没有问题的。但是切换到 SQLite 会在第一个查询之后执行的查询的 conn.Open() 处抛出一个 ObjectDisposedException

任何关于在 c# 中处理数据库的文章 site/tutorial 都指查询完成后立即关闭连接,如果您想执行新查询,只需再次打开连接。

为什么 SQLite 对我的代码有问题?除了 ObjectDisposed 之外,我如何从调试器中获得任何提示(如:如何处理它以确保 mysql 仍然正常运行)?

关于 IDE、程序集和相应连接字符串的一些信息:

Edit: 在调试时查看 conn 显示当 运行 mysql conn.Close() 时,似乎 conn 仍然可用(但显然已关闭)。在用 sqlite 查看 conn 时,似乎 connconn.Close() 之后被销毁了......它不应该因为 IDbConnection 接口而具有相同的行为吗?有什么提示我现在可以做什么吗?

两个文档都说:public void Close() 实现了 IDbConnection.Close

编辑 2conn.Close() 似乎不是问题 - 但 using 块的结尾是。我在 conn-object 上设置了一个 debugger-watch 并用 mysql 测试了它,然后用 sqlite 测试了它。退出 using-block 后,conn-object 使用 sqlite 获取 "destroyed",但使用 mysql.

获取不到

当您退出块时,using 构造调用 Dispose。它旨在无论如何清理非托管资源。因此,如果您尝试再次访问该对象,您将获得 ObjectDisposedException 是有道理的。处理此问题的一种简单方法是不要尝试重用已处理的连接,而是每次都连接。或者,将您的处理逻辑移动到更高级别,以便在处理之前完成所有数据库访问。