【问题标题】:Thread Safe way to access SQL CE Database访问 SQL CE 数据库的线程安全方式
【发布时间】:2012-02-08 15:06:13
【问题描述】:

背景:

在我的 windows phone 项目中。我使用本地 SQL CE 数据库来存储日期。使用 LINQ to SQL 以编程方式创建数据库表。

通过几个线程中的各种数据上下文实例访问该数据库。

问题来了:

我为我的应用程序的用户提供了删除所有数据和注销的选项。当用户选择它时,我使用 datacontext 的 DeleteDatabase 方法删除数据库。但是,我总是收到数据库正在被另一个进程使用的错误,因此无法删除。

任何朝着正确方向的轻推都会让我开心。

【问题讨论】:

  • 当您调用 Delete DB 时,您是否还有任何连接处于打开状态?最有可能是您的进程可以访问数据库而不是其他东西。
  • 好吧,我关闭了所有我知道可以打开的连接。有没有办法获取正在使用数据库的进程并杀死它们?
  • 您是否将 DataContext 的所有实例包装在 using 语句中和/或处置它们?
  • @ErikEj 感谢您指出这一点。我忽略了一个没有使用“使用”语句的实例。改变它解决了这个问题。就像我说你让我开心:)

标签: c# windows windows-phone-7 sql-server-ce


【解决方案1】:

如上所述,安迪(老实说,他们打败了我)问题是在另一个进程仍然打开连接时访问数据库。基本上,可以通过将针对数据库运行的任何代码放在 using 块中来轻松修复,如下所示:

using (MyDataContext db = new MyDataContext("isostore:/MyData.sdf"))
{
    //Run database logic here
}

我想从某种意义上说,它对错误很有意义。在 WP7 中打开的文件也会发生同样的情况。

有关更多信息和示例,请查看此page

【讨论】:

  • 嗨,我试过这种方式,我的意思是我在任何地方都使用了 using 块,但是当我试图删除数据库时它仍然给我错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-20
  • 1970-01-01
相关资源
最近更新 更多