如何在应用程序的设置中部署Sql Server数据库?

时间:2015-03-05 09:45:43

标签: c# sql-server database-restore

我想通过C#(。Net 4.0)程序将.bak文件中的(尚未存在的)数据库恢复到远程数据库服务器中。

我知道通过SQL脚本无法执行此操作,因为.bak文件需要位于SQL Server计算机上。是不是可以通过C#?

基本上我想要这个:

public bool RestoreDatabase(FileInfo backupFile, string connectionString, string dbName) 
{
    // Magically Restore Database
    // Throw Exception on error (Db already exists, file not found, etc)
}

在我投入数小时的编程和调查之前,我想知道它是否在技术上可行,或者我是否必须将.bak文件传输到SQL服务器。

修改 上下文是,我想尽量减少"手册"需要在我当前的项目中完成的工作。目前,在新环境中安装软件时,有人必须通过将.bak文件复制到SQL Server,打开SQL Server Manager并在那里恢复数据库来手动安装数据库。需要2个数据库,这些数据库可能放在2个不同的SQL Server上。

我的想法是在与SQL Server相同的网络中的任何系统上运行1个程序,输入SQL登录凭据,并从一个系统恢复数据库,而不使用任何网络驱动器。因为这又意味着手动配置(将.bak文件复制到网络驱动器,启用SQL服务器访问网络驱动器[实际上你可以直接将文件复制到SQL服务器]),我想避免它。

EDIT2: 由于不同的上下文相关问题,我无法将数据库导出为SQL / DACPAC / Snapshot。它必须是.bak可悲的。

2 个答案:

答案 0 :(得分:1)

你问过"是否可以通过C#来实现?"。

答案是否定的,通过C#是不可能的。

正如@Mithrandir在评论中所说,运行SQL Server的计算机必须能够以某种方式访问​​物理备份文件。这意味着该文件需要位于该计算机的某个位置,或者它必须驻留在计算机可以访问的文件共享上。

答案 1 :(得分:1)

另一种选择是生成sql脚本,将整个数据库even with initial data创建为INSERT语句。您不需要传输任何BAK文件。