【问题标题】:Replace a database MDF file with backup file during runtime in C#在 C# 运行时用备份文件替换数据库 MDF 文件
【发布时间】:2012-12-05 02:45:20
【问题描述】:

我使用 Linq to Sql 编写了相当长的 C# 程序,并且我的数据存储在位于我的程序 EXE附近的 MDF 文件中>。 我的程序的一部分有一个用于备份数据库文件的表单,只需将 MDFLDF 文件复制到用户指定的文件夹中。

但是,如果我查询数据库,然后尝试用备份替换原始文件,我会得到 文件在另一个进程中打开异常如预期的那样! 问题是我不知道如何关闭SqlServer实例中的MDF文件。

我是 Linq to Sql 的新手,我让 Visual Studio 的向导来处理大部分工作!所以如果我想做的任何事情听起来很愚蠢,我提前道歉! :D

非常感谢为我的案例提供更好的编程方法的任何帮助或建议。

【问题讨论】:

  • 这是使用 SQL Server 的永久附加数据库,还是使用 SQL Server Express 的单实例数据库?
  • 这是一个使用 SQL Server Express 的单实例数据库。该程序不应一直运行或同时在多台计算机上运行。

标签: c# linq-to-sql database-backups


【解决方案1】:

这可能无法满足您的需求,但您可能需要考虑将您的应用程序切换为使用 Sql Server Compact Edition(“SqlCE”)而不是 Sql Server(正确)。听起来您将数据库本质上用作应用程序的支持文件,这并不是 Sql Server 的真正预期目的。 SqlCE 是专门为这类事情设计的,在桌面上运行得很好。您可以轻松关闭与 SqlCE 的连接并像处理任何其他文件一样操作 SDF 文件(您尝试对 Sql Server MDF 文件执行的操作未成功)。

更新:这看起来像你需要的:

USE master 
GO 
ALTER DATABASE YourDatabaseName 
SET OFFLINE WITH ROLLBACK IMMEDIATE 
GO 

(来自this answer

【讨论】:

  • 不!数据库在我的应用程序中起着重要的作用。该应用程序应该管理一家相当小的公司的所有会计和订购需求。这就是为什么我想不出比 SQL Server Express 更好的东西了。 SQLite 或 SQLCE 不适合我。
  • 看起来在 SQL Management Studio 中您可以输入alter database my_database_name set offline。但是,我不确定如何以编程方式完成。
  • 仅供参考,SqlCE 可以以高性能的方式处理非常大的数据集。然而,它并不是真正的线程安全的,因此唯一会使其不适合您的目的是,如果您的客户端 EXE 的多个实例试图同时写入同一个 SDF 文件。
  • 感谢您的回答。我不知道 SqlCe 可以处理大量数据。关于上述查询,我​​应该如何将它与我的 LinqToSql 类一起使用?对不起,如果这似乎是一个愚蠢的问题!就像我说的,我是 L2S 的新手……
  • @M2X:抱歉,我根本不了解 Linq。我认为该语句可以使用 ADO.NET(带有 SqlCommand 对象)直接执行。
【解决方案2】:

在复制文件之前,您需要停止 SQL 服务器或使数据库脱机。

【讨论】:

  • 谢谢,但我该怎么做呢?替换文件后如何重新启动 SQL Server?
猜你喜欢
  • 1970-01-01
  • 2012-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多