以编程方式使用备份数据库
如何以编程方式使用.bak数据库备份文件(通过SQL Server中的查询备份)?
我希望我的应用程序将我的数据库备份到一个位置(我已经可以这样做),并且我还希望它能够加载备份的数据库(.bak文件)。
我怎么能用C#做到这一点?
您需要首先确保在开发框中安装了SMO(SQL Server管理对象)并可以使用它。 如果您在其上安装了某些版本的SQL Server,通常就是这种情况。
如果您有可用的SMO库,则可以使用此代码段进行操作:
using Microsoft.SqlServer.Management.Common; using Microsoft.SqlServer.Management.Smo; static void Main(string[] args) { // create instance of SMO Server object Server myServer = new Server("(local)"); // create new instance of "Restore" object Restore res = new Restore(); res.Database = "SMO"; // your database name // define options res.Action = RestoreActionType.Database; res.Devices.AddDevice(@"C:\SMOTest.bak", DeviceType.File); res.PercentCompleteNotification = 10; res.ReplaceDatabase = true; // define a callback method to show progress res.PercentComplete += new PercentCompleteEventHandler(res_PercentComplete); // execute the restore res.SqlRestore(myServer); } // method to show restore progress static void res_PercentComplete(object sender, PercentCompleteEventArgs e) { // do something...... }
为此,您需要具有以下项目引用
名称空间Microsoft.SqlServer.SmoExtended
在名为Microsoft.SqlServer.SmoExtended.dll
的程序集中实现,如果安装了SMO,则该程序集应位于目录C:\Program Files\Microsoft SQL Server\100\SDK\Assemblies\
。
如果你没有安装SMO,你可以从这里获取SQL Server 2008或SQL Server 2008 R2(这里也有SQL Server 2005的旧版本)
只需使用SqlCommand.ExecuteNonQuery执行执行操作所需的SQL,例如:
BACKUP DATABASE [dbname] ...... RESTORE DATABASE [dbname] ......
当然,有问题的SQL用户需要具有适当的权限。
这是如何备份:
-- ========================================================= -- Author: Stefan -- Create date: 16.07.2010 -- Last mutation: 16.07.2010 -- Description: Backup der ausgewählten Datenbank -- ========================================================= CREATE PROCEDURE [dbo].[sp_BackupDatabase] @in_strDataBase varchar(50) --,@in_strUser varchar(36) AS BEGIN DECLARE @strBasePath nvarchar(3000) DECLARE @strFileName nvarchar(1000) DECLARE @strFileNameAndPath nvarchar(4000) SET @strBasePath = 'E:\Temp\' SET @strFileName = @in_strDataBase SET @strFileName = @strFileName + '_' SET @strFileName = @strFileName + convert(varchar, getdate(), 112) SET @strFileName = @strFileName + '_' + REPLACE(convert(varchar, getdate(), 108),':','_'); SET @strFileName = @strFileName + '_sts' SET @strFileName = @strFileName + '.bak' SET @strFileNameAndPath = @strBasePath + @strFileName PRINT @strFileNameAndPath BACKUP DATABASE @in_strDataBase TO DISK=@strFileNameAndPath END GO
这是如何恢复:
RESTORE DATABASE MyDatabase FROM DISK='C:\temp\MyDatabase_20100810.bak' WITH REPLACE, MOVE 'MyDatabase' TO 'E:\SQLData_2008\MyDatabase.mdf', MOVE 'MyDatabase_log' TO 'E:\SQLData_2008\MyDatabase.ldf'
检查此链接:
使用c#创建SQL Server备份文件(.bak)到任何位置
这个:
备份和还原SQL数据库