先把代码贴上吧
using System; using System.Collections.Generic; using System.Text; using System.Data.SqlClient; using System.Data; using System.Windows.Forms; namespace DBAdmin { public class DbBackUpAndRestore { /// <summary> /// 服务器 /// </summary> private string server = ""; public string Server { get { return this.server; } set { this.server = value; } } /// <summary> /// 登录名 /// </summary> private string uid = ""; public string UID { get { return this.uid; } set { this.uid = value; } } /// <summary> /// 登录密码 /// </summary> private string pwd = ""; public string PWD { get { return this.pwd; } set { this.pwd = value; } } /// <summary> /// 要操作的数据库 /// </summary> private string database = ""; public string Database { get { return this.database; } set { this.database = value; } } /// <summary> /// 数据库连接字符串 /// </summary> private string conn = ""; /// <summary> /// 备份路经 /// </summary> private string backPath = ""; public string BackPath { get { return this.backPath; } set { this.backPath = value; } } /// <summary> /// 还原文件路经 /// </summary> private string restoreFile = ""; public string RestoreFile { get { return this.restoreFile; } set { this.restoreFile = value; } } private ProgressBar bar; public ProgressBar Bar { get { return bar; } set { bar = value; } } /// <summary> /// DbBackUpAndRestore类的构造函数 /// </summary> public DbBackUpAndRestore() { } /// <summary> /// 切割字符串 /// </summary> /// <param name="str"></param> /// <param name="bg"></param> /// <param name="ed"></param> /// <returns></returns> public string StringCut(string str, string bg, string ed) { string sub; sub = str.Substring(str.IndexOf(bg) + bg.Length); sub = sub.Substring(0, sub.IndexOf(";")); return sub; } /// <summary> /// 构造文件名 /// </summary> /// <returns>文件名</returns> private void CreatePath() { string CurrTime = System.DateTime.Now.ToString(); CurrTime = CurrTime.Replace("-", ""); CurrTime = CurrTime.Replace(":", ""); CurrTime = CurrTime.Replace(" ", ""); CurrTime = CurrTime.Substring(0, 12); backPath += "//_db_" + CurrTime + ".BAK"; } private void Step(string message, int percent) { Bar.Value = percent; } /// <summary> /// 数据库备份 /// </summary> /// <returns>备份是否成功</returns> public bool DbBackup() { CreatePath(); SQLDMO.Backup oBackup = new SQLDMO.BackupClass(); SQLDMO.SQLServer oSQLServer = new SQLDMO.SQLServerClass(); try { oSQLServer.LoginSecure = false; oSQLServer.Connect(server, uid, pwd); oBackup.Action = SQLDMO.SQLDMO_BACKUP_TYPE.SQLDMOBackup_Database; SQLDMO.BackupSink_PercentCompleteEventHandler pceh = new SQLDMO.BackupSink_PercentCompleteEventHandler(Step); oBackup.PercentComplete += pceh; oBackup.Database = database; oBackup.Files = backPath; oBackup.BackupSetName = database; oBackup.BackupSetDescription = "数据库备份"; oBackup.Initialize = true; oBackup.SQLBackup(oSQLServer); return true; } catch (Exception ex) { return false; throw ex; } finally { oSQLServer.DisConnect(); } } /// <summary> /// 数据库恢复 /// </summary> public string DbRestore() { if (exepro() != true) { return "操作失败"; } else { SQLDMO.Restore oRestore = new SQLDMO.RestoreClass(); SQLDMO.SQLServer oSQLServer = new SQLDMO.SQLServerClass(); try { exepro(); oSQLServer.LoginSecure = false; oSQLServer.Connect(server, uid, pwd); oRestore.Action = SQLDMO.SQLDMO_RESTORE_TYPE.SQLDMORestore_Database; SQLDMO.RestoreSink_PercentCompleteEventHandler pceh = new SQLDMO.RestoreSink_PercentCompleteEventHandler(Step); oRestore.PercentComplete += pceh; oRestore.Database = database; ///自行修改 oRestore.Files = restoreFile; oRestore.FileNumber = 1; oRestore.ReplaceDatabase = true; oRestore.SQLRestore(oSQLServer); return "数据库恢复成功"; } catch (Exception e) { return "恢复数据库失败,原因:" + e.Message; throw e; } finally { oSQLServer.DisConnect(); } } } /// <summary> /// 杀死当前库的所有进程 /// </summary> /// <returns></returns> private bool exepro() { bool success = true; SQLDMO.SQLServer svr = new SQLDMO.SQLServerClass(); try { svr.Connect(server, uid, pwd); //取得所有的进程列表 SQLDMO.QueryResults qr = svr.EnumProcesses(-1); int iColPIDNum = -1; int iColDbName = -1; //找到和要恢复数据库相关的进程 for (int i = 1; i <= qr.Columns; i++) { string strName = qr.get_ColumnName(i); if (strName.ToUpper().Trim() == "SPID") { iColPIDNum = i; } else if (strName.ToUpper().Trim() == "DBNAME") { iColDbName = i; } if (iColPIDNum != -1 && iColDbName != -1) break; } //将相关进程关闭 for (int i = 1; i <= qr.Rows; i++) { int lPID = qr.GetColumnLong(i, iColPIDNum); string strDBName = qr.GetColumnString(i, iColDbName); if (strDBName.ToUpper() == database) svr.KillProcess(lPID); } } catch (Exception ex) { success = false; } return success; } public bool Operate(bool isBackup) { //备份:use master;backup database @name to disk=@path; //恢复:use master;restore database @name from disk=@path; SqlConnection connection = new SqlConnection("Data Source=" + server + ";initial catalog=" + database + ";user id=" + uid + ";password=" + pwd + ";"); if (!restoreFile.EndsWith(".bak")) { restoreFile += ".bak"; } if (isBackup)//备份数据库 { SqlCommand command = new SqlCommand("use master;backup database @name to disk=@path;", connection); connection.Open(); command.Parameters.AddWithValue("@name", Database); command.Parameters.AddWithValue("@path", restoreFile); command.ExecuteNonQuery(); connection.Close(); } else//恢复数据库 { SqlCommand command = new SqlCommand("use master;restore database @name from disk=@path;", connection); connection.Open(); command.Parameters.AddWithValue("@name", Database); command.Parameters.AddWithValue("@path", restoreFile); command.ExecuteNonQuery(); connection.Close(); } return true; } } }
第一种方法是利用库SQLDMO来进行数据库的备份和恢复。这种方法在恢复时,原数据不能正在使用当中,可以先把原数据库删除,适用于数据库误删除或者sql server数据库软件重装的情况下进行.当然这种情况下,发布时,必须把库SQLDMO打包。
第二种方式是通过调用sql指令来完成数据库的备份和还原。这种方法在恢复时,原数据必须存在,恢复时覆盖掉原数据库的数据。
备份的情况当然是数据库必须存在而且已经附加到数据库管理器中。
可以根据需要采用这两种方式
您还没有登录,请您登录后再发表评论
用C#写的实现数据库备份与还原的工程(VS2008下可直接运行,低于08的版本可以拷贝代码实现,记得要在COM中添加SQLSMO引用,本例数据库为SuperMarket,请更改为你所需备份的数据库),个人特意将两种方法放在同一工程...
人事资料查询将人事档案的各个类别构成组合的查询条件进行查询操作,包括与运算和或运算,即必须同时满足和拥有此条件即满足两种,查询结果显示在表格中。人事资料统计包括统计条件和结果,选择按条件查询会显示各...
另一种方法是通过SQL Server的企业管理器的恢复数据库功能,从数据库备份文件恢复,备份文件的扩展名为bak。ADO.NET不需要额外设置数据库连接,如果用户数据库安装正确的话,即可直接双击程序运行。 所有文件都被...
餐饮管理系统使用说明书 配置源程序 附加数据库SQL Server 2000 (1)将TM\\06\\MrCy\\MrCy\\DataBase文件夹中的扩展名为db_MrCy.mdfF和db_MrCy.ldf的两个文件拷贝到SQL Server安装路径下的Data文件夹中。...
(1)将TM\06\MrCy\MrCy\DataBase文件夹中的扩展名为db_MrCy.mdfF和db_MrCy.ldf的两个文件拷贝到SQL Server安装路径下的Data文件夹中。 (2)打开SQL Server 2000中的“企业管理器”,然后展开本地服务器,在...
273 实例190 获取窗口文本 273 实例191 判断文件是否正在被使用 274 实例192 在程序中调用.HLP文件 275 实例193 C#中实现文件拖放 276 实例194 文件比较 276 第7章 操作系统与Windows...
另一种方法是通过SQL Server的企业管理器的恢复数据库功能,从数据库备份文件恢复,备份文件的扩展名为bak。ADO.NET不需要额外设置数据库连接,如果用户数据库安装正确的话,即可直接双击程序运行。
实例229 C#中实现文件拖放 317 实例230 文件比较 318 实例231 获取文件夹中的图标资源 319 实例232 获取文件夹下的所有文件夹及文件的名称 321 第7章 操作系统与Windows相关程序 324 7.1 启动相关 325 实例...
C#编程经验技巧宝典源代码,目录如下: 第1章 开发环境 1 <br>1.1 Visual Studio开发环境安装与配置 2 <br>0001 安装Visual Studio 2005开发环境须知 2 <br>0002 配置合适的Visual Studio 2005...
相关推荐
用C#写的实现数据库备份与还原的工程(VS2008下可直接运行,低于08的版本可以拷贝代码实现,记得要在COM中添加SQLSMO引用,本例数据库为SuperMarket,请更改为你所需备份的数据库),个人特意将两种方法放在同一工程...
人事资料查询将人事档案的各个类别构成组合的查询条件进行查询操作,包括与运算和或运算,即必须同时满足和拥有此条件即满足两种,查询结果显示在表格中。人事资料统计包括统计条件和结果,选择按条件查询会显示各...
另一种方法是通过SQL Server的企业管理器的恢复数据库功能,从数据库备份文件恢复,备份文件的扩展名为bak。ADO.NET不需要额外设置数据库连接,如果用户数据库安装正确的话,即可直接双击程序运行。 所有文件都被...
餐饮管理系统使用说明书 配置源程序 附加数据库SQL Server 2000 (1)将TM\\06\\MrCy\\MrCy\\DataBase文件夹中的扩展名为db_MrCy.mdfF和db_MrCy.ldf的两个文件拷贝到SQL Server安装路径下的Data文件夹中。...
(1)将TM\06\MrCy\MrCy\DataBase文件夹中的扩展名为db_MrCy.mdfF和db_MrCy.ldf的两个文件拷贝到SQL Server安装路径下的Data文件夹中。 (2)打开SQL Server 2000中的“企业管理器”,然后展开本地服务器,在...
273 实例190 获取窗口文本 273 实例191 判断文件是否正在被使用 274 实例192 在程序中调用.HLP文件 275 实例193 C#中实现文件拖放 276 实例194 文件比较 276 第7章 操作系统与Windows...
另一种方法是通过SQL Server的企业管理器的恢复数据库功能,从数据库备份文件恢复,备份文件的扩展名为bak。ADO.NET不需要额外设置数据库连接,如果用户数据库安装正确的话,即可直接双击程序运行。
实例229 C#中实现文件拖放 317 实例230 文件比较 318 实例231 获取文件夹中的图标资源 319 实例232 获取文件夹下的所有文件夹及文件的名称 321 第7章 操作系统与Windows相关程序 324 7.1 启动相关 325 实例...
实例229 C#中实现文件拖放 317 实例230 文件比较 318 实例231 获取文件夹中的图标资源 319 实例232 获取文件夹下的所有文件夹及文件的名称 321 第7章 操作系统与Windows相关程序 324 7.1 启动相关 325 实例...
实例229 C#中实现文件拖放 317 实例230 文件比较 318 实例231 获取文件夹中的图标资源 319 实例232 获取文件夹下的所有文件夹及文件的名称 321 第7章 操作系统与Windows相关程序 324 7.1 启动相关 325 实例...
C#编程经验技巧宝典源代码,目录如下: 第1章 开发环境 1 <br>1.1 Visual Studio开发环境安装与配置 2 <br>0001 安装Visual Studio 2005开发环境须知 2 <br>0002 配置合适的Visual Studio 2005...
实例229 C#中实现文件拖放 317 实例230 文件比较 318 实例231 获取文件夹中的图标资源 319 实例232 获取文件夹下的所有文件夹及文件的名称 321 第7章 操作系统与Windows相关程序 324 7.1 启动相关 325 实例...