我该如何发布sql express数据库?

时间:2008-11-26 01:26:19

标签: .net sql-server sql-server-express

我有一个使用SQL Express 2005数据库的简单应用程序。当用户关闭应用程序时,我想通过在另一个目录中复制来提供备份数据库的选项。但是,当我尝试这样做时,我得到“进程无法访问文件'... \ Price.MDF',因为它正被另一个进程使用。”我关闭了连接,处理了连接,将其设置为空,并且GC.Collect(),但它没有任何区别。我的连接字符串是“Data Source =。\ SQLEXPRESS2005; AttachDbFilename = | DataDirectory | \ Pricing.mdf; Integrated Security = True; User Instance = True”,我只是一直使用相同的连接。我没有看到我可以在哪里分离数据库以抵消连接字符串中的附加。

1 - 我如何释放这个东西? 2 - 有没有比复制数据库更好的方法?该应用程序仅适用于我的丈夫,因此如果他确实需要从备份中恢复,我将能够处理它。

谢谢!

3 个答案:

答案 0 :(得分:4)

您不希望直接复制mdf,因为SQL会保留事务日志中的大部分更改,在运行某些查询后查看修改时间,它不会直接写入文件。我在设置rsync作业时注意到了这一点。

让SQL生成备份更安全,更理想,单用户或多用户。您可以提供指向调用T-SQL的函数的链接,您可以完全自动化源数据库和目标文件夹:

BACKUP DATABASE [mydatabasename]
TO  DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Backup\Scheduled Task Backups\mydatabasename-backup' WITH NOFORMAT, NOINIT,  NAME = N'mydatabasename-Full Data

SQL 2005引入了另一种T-SQL语法来实现这一点,对于我来说,我找不到它。但是有很多方法可以通过M $$ SQL来实现,而无需使用完整的数据库服务器。

答案 1 :(得分:0)

this post中有一个示例,说明如何在程序中备份SQL Express数据库。

答案 2 :(得分:0)

如果这是单用户或应用程序或只读数据库,则不使用SQL Server Express 。这就是SQL Server Compact的用途。这将解决您的备份问题并简化部署。