我编写了一个使用Sql Express数据库服务器的Windows应用程序。
如何通过我的应用程序以编程方式备份和恢复数据库?
答案 0 :(得分:2)
您可以让应用程序启动.sql文件,为您进行备份或还原。当然,我大多数时候都是在计划任务中看到这个,但我想你可以通过你应用程序内的触发事件来做到这一点。
System.Diagnostics.Process p = new System.Diagnostics.Process();
p.StartInfo.FileName = "C:\\path\\to\\backup.sql";
p.Start();
更新:
正如评论中所指出的,如果您没有在服务器上安装SQL Management Studio,这将不起作用。或者,您可以调用存储过程。经过反思,我不知道为什么我没有先建议存储过程 - 可能是因为其他方法在我的大脑中是新鲜的,因为在之前的项目中被迫以这种方式实现它。
答案 1 :(得分:1)
您可以执行以下命令从应用内请求备份:
@"BACKUP DATABASE [MyDBName] TO DISK = 'c:\somedir\MyDBName.bak' WITH INIT"
(ref)
或直接使用SQL SMO对象SqlBackup()。
答案 2 :(得分:1)
您可以使用SQL Server Management Objects
首先在项目中添加一个引用:Microsoft.SqlServer.Smo.dll,Microsoft.SqlServer.SmoExtended.dll,Microsoft.SqlServer.SqlEnum.dll和Microsoft.SqlServer.SmoEnum.dll。
之后备份您的数据库请遵循以下示例:
//Connect to the server
Server srv = new Server();
//If Sql Server is not local or is a named instance you could do
//Server srv = new Server("SERVERNAME");
Database db = srv.Databases("YourDB");
//Create a backup definition
Backup backup = new Backup();
backup.Action = BackupActionType.Database;
backup.BackupSetDescription = "Full backup of Adventureworks2008R2";
backup.BackupSetName = "My app Backup";
backup.Database = "YourDB";
//Configure the backup device
BackupDeviceItem backupDevice = new BackupDeviceItem("YourDB.bak", DeviceType.File);
backup.Devices.Add(backupDevice);
//Specify wether do a full backup or not
backup.Incremental = false;
//Specify log truncation mode
backup.LogTruncation = BackupTruncateLogType.Truncate;
//Do the backùp
backup.SqlBackup(srv);