c# - MySQL 运行良好 - SQLite 抛出 ObjectDisposedException

标签 c# mysql sqlite compact-framework factory

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

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

执行查询看起来像这样(简化):

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

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

任何编写有关在 c# 中处理数据库的网站/教程都提到在查询完成后立即关闭连接,如果您想执行新查询,只需再次打开连接即可。

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

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

  • Visual Studio 2008 教授
  • MySQL 连接器/.NET - 6.9.6.0
    • SERVER={0};DATABASE={1};UID={2};PASSWORD={3}
  • System.Data.SQLite ( https://system.data.sqlite.org ) - 1.0.97.0 PocketPC/ARM
    • 已尝试 Data Source=mydb.sqlite;Version=3;Pooling=True;Max Pool Size=100;FailIfMissing=True;
    • Data Source=mydb.sqlite;Version=3;FailIfMissing=True;
  • 数据库的相同结构和值

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

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

编辑 2:conn.Close() 似乎不是问题所在 - 但 using block 的结尾是.我在 conn-object 上设置了一个 debugger-watch,并用 mysql 和 sqlite 对其进行了测试。退出 using block 后,conn 对象会被 sqlite“销毁”,但不会被 mysql 销毁。

最佳答案

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

关于c# - MySQL 运行良好 - SQLite 抛出 ObjectDisposedException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31806788/

相关文章:

c# - OpenXml 多图像

MySql: FIND_IN_SET 不能正常工作

java - 如何将图像保存到 Room Persistence Library

sqlite - 在 "DELETE FROM table"之后更改 sqlite 文件大小

Statement prepare 中的 Sqlite pendingOperation

字符串中的 C# Razor 语法

c# - Selenium 与 UWP 应用程序?

c# - 减少 C# 中的位图位大小

phpmyadmin 警报 "This operation could take a long time. Proceed anyway?"

php - 动态地从 MySQL 字符串中提取 WHERE 组件