我想通过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可悲的。
答案 0 :(得分:1)
你问过"是否可以通过C#来实现?"。
答案是否定的,通过C#是不可能的。
正如@Mithrandir在评论中所说,运行SQL Server的计算机必须能够以某种方式访问物理备份文件。这意味着该文件需要位于该计算机的某个位置,或者它必须驻留在计算机可以访问的文件共享上。
答案 1 :(得分:1)
另一种选择是生成sql脚本,将整个数据库even with initial data创建为INSERT语句。您不需要传输任何BAK文件。