C#中结合使用SQLDMO实现备份、还原SQLserver数据库

找了好几个,这个例子还算不错!

主要在还原数据库时,有杀死其它连接进程的代码

1 using System;2 using System.Collections.Generic;3 using System.ComponentModel;4 using System.Data;5 using System.Drawing;6 using System.Text;7 using System.Windows.Forms;8 namespace Magicbit.Framework9 { 10     public partial class DBTools : Form 11     { 12         private static DBTools _Instance = null; 13         public static DBTools Instance() 14         { 15             if (_Instance == null) 16             { 17                 _Instance = new DBTools(); 18             } 19             else 20             { 21                 MessageBox.Show("已经有一个实例在运行!"); 22             } 23             return _Instance; 24         } 25 26         public DBTools() 27         { 28             InitializeComponent(); 29         } 30         private void BackAndRecoverDB_Load(object sender, EventArgs e) 31         { 32             this.txtSavePath.Text = Application.StartupPath; 33             //this.GetSQLServerList(); 34         } 35         private void GetSQLServerList() 36         { 37             //get all available SQL Servers 38             SQLDMO._Application sqlApp = new SQLDMO.ApplicationClass(); 39             SQLDMO.NameList sqlServers = sqlApp.ListAvailableSQLServers(); 40             for (int i = 0; i < sqlServers.Count; i++) 41             { 42                 object srv = sqlServers.Item(i + 1); 43                 if (srv != null) 44                 { 45                     this.cboServers.Items.Add(srv); 46                 } 47             } 48             if (this.cboServers.Items.Count > 0) 49                 this.cboServers.SelectedIndex = 0; 50             else 51                 this.cboServers.Text = "<No available SQL Servers>"; 52 53         } 54         private void GetBackUpDB() 55         { 56             SQLDMO.Application sqlApp    = new SQLDMO.ApplicationClass(); 57             SQLDMO.SQLServer srv         = new SQLDMO.SQLServer(); 58             srv.Connect(this.cboServers.Text.Trim(),this.txtUserName.Text.Trim(),this.txtPassword.Text.Trim()); 59             foreach (SQLDMO.Database db in srv.Databases) 60             { 61                 if (db.Name != null) 62                     this.cboDatabase.Items.Add(db.Name); 63             } 64 65         } 66         private void pictureBox1_Click(object sender, EventArgs e) 67         { 68             MessageBox.Show("欢迎使用数据库备份、还原工具,本工具将协助你备份和还原数据库,确保数据安全!", "备份您的数据库"); 69         } 70         private void button1_Click(object sender, EventArgs e) 71         { 72             this.GetBackUpDB(); 73         } 74         private void BackUpDB() 75         { 76             string selfName = this.txtSavePath.Text.Trim() + @"" + this.cboDatabase.Text.Trim() + "_"+ System.DateTime.Now.ToString("yyyyMMddHHmmss")+".DAT"; 77             string deviceName = this.cboDatabase.Text.Trim()+"bak"; 78             string remark = "数据备份"; 79             //BACKUP DB 80             SQLDMO.Backup oBackup = new SQLDMO.BackupClass(); 81             SQLDMO.SQLServer oSQLServer = new SQLDMO.SQLServerClass(); 82             oBackup.Action = 0 ; 83             oBackup.Initialize = true ; 84             SQLDMO.BackupSink_PercentCompleteEventHandler pceh = new SQLDMO.BackupSink_PercentCompleteEventHandler(Step); 85             oBackup.PercentComplete += pceh; 86             try 87             { 88                 oSQLServer.LoginSecure = false; 89                 oSQLServer.Connect(this.cboServers.Text.Trim(),this.txtUserName.Text.Trim(),this.txtPassword.Text.Trim()); 90                 oBackup.Action = SQLDMO.SQLDMO_BACKUP_TYPE.SQLDMOBackup_Database; 91                 oBackup.Database = this.cboDatabase.Text.Trim();//数据库名 92                 oBackup.Files = selfName;//文件路径 93                 oBackup.BackupSetName = deviceName;//备份名称 94                 oBackup.BackupSetDescription = remark;//备份描述 95                 oBackup.Initialize = true; 96                 oBackup.SQLBackup(oSQLServer); 97             } 98             catch(System.Exception ex) 99             {100                 MessageBox.Show("数据备份失败: " + ex.ToString());101             }102             finally103             {104                 oSQLServer.DisConnect();105             }106         }107         private void Step(string message, int percent)108         {109             this.progressBar1.Value = percent;110         }111         private void button2_Click(object sender, EventArgs e)112         {113             this.Cursor = Cursors.WaitCursor;114             this.label6.Visible = true;115             this.progressBar1.Visible = true;116             this.BackUpDB();117             this.Cursor = Cursors.Default;118             this.label6.Text = "备份已完成.";119         }120         public void RestoreDB()121         {122             string filePath = this.txtBackUpFile.Text.Trim();123             SQLDMO.Restore oRestore = new SQLDMO.RestoreClass();124             SQLDMO.SQLServer oSQLServer = new SQLDMO.SQLServerClass();125             oRestore.Action = 0 ;126             SQLDMO.RestoreSink_PercentCompleteEventHandler pceh = new SQLDMO.RestoreSink_PercentCompleteEventHandler(Step);127             oRestore.PercentComplete += pceh;128             try129             {130             oSQLServer.Connect(this.cboServers.Text.Trim(),this.txtUserName.Text.Trim(),this.txtPassword.Text.Trim());131             SQLDMO.QueryResults qr = oSQLServer.EnumProcesses(-1) ;132             int iColPIDNum = -1 ;133             int iColDbName = -1 ;134             //杀死其它的连接进程135             for(int i=1;i<=qr.Columns;i++)136             {137                 string strName = qr.get_ColumnName(i) ;138                 if (strName.ToUpper().Trim() == "SPID")139                 {140                      iColPIDNum = i ;141                 }142                 else if (strName.ToUpper().Trim() == "DBNAME")143                 {144                     iColDbName = i ;145                 }146                 if (iColPIDNum != -1 && iColDbName != -1)147                 break ;148                 }149                 for(int i=1;i<=qr.Rows;i++)150                 {151                     int lPID = qr.GetColumnLong(i,iColPIDNum) ;152                     string strDBName = qr.GetColumnString(i,iColDbName) ;153                     if (strDBName.ToUpper() == "CgRecord".ToUpper())154                     oSQLServer.KillProcess(lPID) ;155                 }156                 oRestore.Action = SQLDMO.SQLDMO_RESTORE_TYPE.SQLDMORestore_Database;157                 oRestore.Database = this.cboDBtoBackup.Text;158                 oRestore.Files = filePath;159                 oRestore.FileNumber = 1;160                 oRestore.ReplaceDatabase = true;161                 oRestore.SQLRestore(oSQLServer);162             }163             catch(System.Exception ex)164             {165                 MessageBox.Show("数据还原失败: " + ex.ToString());166             }167             finally168             {169                 oSQLServer.DisConnect();170             }171172173         }174         private void button3_Click(object sender, EventArgs e)175         {176             this.folderBrowserDialog1.Description = "请选择备份文件存放目录";177             this.folderBrowserDialog1.ShowNewFolderButton = true;178             this.folderBrowserDialog1.ShowDialog();179             this.txtSavePath.Text = this.folderBrowserDialog1.SelectedPath;180         }181         private void button4_Click(object sender, EventArgs e)182         {183             this.openFileDialog1.DefaultExt = "*.dat";184             this.openFileDialog1.Title = "请选择要还原的数据库备份文件.";185             this.openFileDialog1.ShowDialog();186             this.txtBackUpFile.Text = this.openFileDialog1.FileName;187         }188         private void button5_Click(object sender, EventArgs e)189         {190             this.Cursor = Cursors.WaitCursor;191             this.label6.Visible = true;192             this.progressBar1.Visible = true;193             this.RestoreDB();194             this.Cursor = Cursors.Default;195             this.label6.Text = "还原已完成.";196         }197     }198}

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索private
, text
, this
, system
, vent andler
, SQLDMO
, Trim
SQLSERVERS
c站、c语言、cf、ch、c罗,以便于您获取更多的相关知识。

时间: 2024-07-28 14:48:03

C#中结合使用SQLDMO实现备份、还原SQLserver数据库的相关文章

xtrabackup备份还原MySQL数据库

原文:xtrabackup备份还原MySQL数据库   mysqldump 备份鉴于其自身的某些特性(锁表,本质上备份出来insert脚本或者文本,不支持差异备份),不太适合对实时性要求比较高的情况Xtrabackup可以解决mysqldump存在的上述的一些问题,生产环境应用的也会更多一些.本文简单测试一下Xtrabackup对MySQL数据库的备份还原操作. 本着先把功能先撸起来再深入细节的原则,粗略地实现了一个备份还原,并未深入细节. 网上有不少xtrabackup的文章,因为环境不一样,

C#备份还原MySql数据库

原文:C#备份还原MySql数据库       项目结束,粘点代码出来让Google或Baidu一下,原因是现在还搜不到这么现成的       调用MySql的工具mysqldump来实现.       类Cmd来实现调用cmd命令, 要启动的进程所在的目录是说mysql自动的备份还原数据库工具mysqldump和mysql所在目录,当然,这个方法可以执行别的命令行工具.   using System;using System.Collections.Generic;using System.T

linux下如何备份还原mysql数据库

本文介绍了linux下如何备份与恢复mysql数据库. 数据库备份是非常重要的.如果定期做好备份,这样就可以在发生系统崩溃时恢复数据到最后一次正常的状态,把损失减小到最少. 一. 用命令实现备份 MySQLl提供了一个mysqldump命令,我们可以用它进行数据备份. 按提示输入密码,这就把tm数据库所有的表结构和# mysqldump -u root -p tm > tm_050519.sql数据备份到tm_050519.sql了,因为要总进行备份工作,如果数据量大会占用很大空间,这时可以利用

java 备份还原本地数据库 sql server 2005

问题描述 java 备份还原本地数据库 sql server 2005 这是用swing开发的一个界面想要点击 按钮 可以实现数据库的备份和还原本来尝试了下 但是失败了 代码如下JButton button = new JButton(""u786Eu8BA4""); button.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { try

asp.net 数据库备份还原(sqlserver+access)_实用技巧

/********************************************************************************** * * 功能说明:备份和恢复SQL Server数据库 * 作者: 刘功勋; * 版本:V0.1(C#2.0);时间:2007-1-1 * 当使用SQL Server时,请引用 COM组件中的,SQLDMO.dll组件 * 当使用Access中,请浏览添加引用以下两个dll * 引用C:\Program Files\Common

使用mysqldump工具备份还原Mysql数据库

我们在网站数据维护中经常会遇到备份数据库,还原数据库的情况,我们一般用一下两种方式来处理: 1.使用into outfile 和 load data infile导入导出备份数据 这种方法的好处是,导出的数据可以自己规定格式,并且导出的是纯数据,不存在建表信息,你可以直接导入另外一个同数据库的不同表中,相对于mysqldump比较灵活机动. 我们来看下面的例子: (1)下面的mysql命令是把select的mytable表中的数据导出到/home/db_bak2012文件. select * f

备份与还原sqlserver数据库图文详解

创建一个叫TestBackup的数据库,创建一张叫Table1的表,这个时候进行一次完整备份,备份文件为:TestBackupDB-full.bak:接着创建表Table2后进行差异备份,备份文件为:TestBackupDB-diff.bak:接着创建表Table3后进行事务日志备份(如果数据库设置了恢复模式为[简单],那么在备份类型选项中将看不到[事务日志]),备份文件为:TestBackupDB-log.bak: 创建一个叫TestBackup2的数据库,用于测试TestBackup数据库的

如何用Navicat备份还原Mysql数据库

Navicat for MySQL数据库备份还原简要教程 一.下载 Navicat 9 Lite(服务器已经有装的,就不要安装了) 二.打开Navicat---连接---Mysql 三.填写数据库连接信息 四.导出数据库文件 双击打开创建的连接---选择您的数据库---右键点击---选择"转储SQL文件",即可将数据库导入成.sql文件 五. 导入数据库文件 1)双击打开创建的连接---选择您的数据库---右键点击---选择"运行SQL文件" 2)选择您的数据库备份

将备份的SQLServer数据库转换为SQLite数据库操作方法_MsSql

操作方法:先要安装好SQLServer2005,并且记住安装时自己设置的用户名和密码.下面以恢复SQLServer下备份的数据库文件epdmdb20101008.bak为SQLite数据库为例来说明操作的步骤. ① 打开SQLServer2005,如下图所示: 在登陆界面输入登录名和密码,点"连接". 登录之后的界面如下: ② 新建一个数据库. 点左边导航栏的数据库,右键-新建数据库:如下图所示: 在弹出的新建数据库窗口中输入"数据库名称",点"添加&qu