A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  1. #region 类说明
  2. //-----------------------------------------------------------------------------
  3. //
  4. // 项目名称:###
  5. // 文件名称:DBBakManager.cs
  6. // 文件说明:对数据库备份文件进行管理。提供备份、还原、备份文件管理操作。
  7. //
  8. // 开始日期:20014年07月015日
  9. // 开发人员:###
  10. //
  11. //-----------------------------------------------------------------------------
  12. #endregion

  13. using System;
  14. using System.Collections.Generic;
  15. using System.IO;
  16. using System.Text;
  17. using SQLDMO;       //添加引用C:Program FilesMicrosoft SQL Server80ToolsBinnSQLDMO.dll

  18. namespace GSIM.StuManager
  19. {
  20.     /// <summary>
  21.     /// 对SQL Server数据库备份文件进行管理。提供备份、还原、备份文件管理操作。
  22.     /// </summary>
  23.     public class DBBakManager
  24.     {

  25.         字段#region 字段

  26.         private string _serverName;
  27.         private string _userName;
  28.         private string _password;
  29.         private string _dbName;

  30.         #endregion

  31.         构造#region 构造

  32.         /// <summary>
  33.         /// 构造函数
  34.         /// </summary>
  35.         /// <param name="serverName">数据库服务器名
  36.         /// <param name="userName">数据库用户名
  37.         /// <param name="password">用户密码
  38.         /// <param name="dbName">数据库名
  39.         public DBBakManager(string serverName, string userName, string password,string dbName)
  40.         {
  41.             _serverName = serverName;
  42.             _userName = userName;
  43.             _password = password;
  44.             _dbName = dbName;
  45.         }

  46.         #endregion

  47.         方法#region 方法

  48.         /// <summary>
  49.         /// 备份数据库
  50.         /// </summary>
  51.         /// <param name="saveFileName">保存的备份文件路径(包括文件名,文件名格式为:"DBName(yyyyMMddHHmm).bak")
  52.         /// <returns>操作成功返回true,否则返回false</returns>
  53.         public bool BackUpDB(string saveFileName)
  54.         {
  55.             SQLDMO.SQLServer svr = new SQLDMO.SQLServerClass();
  56.             try
  57.             {
  58.                 svr.Connect(_serverName, _userName, _password);
  59.                 SQLDMO.Backup bak = new SQLDMO.BackupClass();
  60.                 bak.Action = SQLDMO.SQLDMO_BACKUP_TYPE.SQLDMOBackup_Database;
  61.                 bak.Initialize = true;
  62.                 bak.Database = _dbName;
  63.                 bak.Files = saveFileName;
  64.                 bak.SQLBackup(svr);
  65.                 return true;
  66.             }
  67.             catch (Exception err)
  68.             {
  69.                 return false;
  70.             }
  71.             finally
  72.             {
  73.                 svr.Close();
  74.             }
  75.         }

  76.         /// <summary>
  77.         /// 还原数据库备份
  78.         /// </summary>
  79.         /// <param name="fileName">还原的备份文件路径(包括文件名,文件名格式为:"DBName(yyyyMMddHHmm).bak")
  80.         /// <returns>操作成功返回true,否则返回false</returns>
  81.         public bool RestoreDB(string fileName)
  82.         {
  83.             SQLDMO.SQLServer svr = new SQLDMO.SQLServerClass();
  84.             try
  85.             {
  86.                 svr.Connect(_serverName, _userName, _password);
  87.                 //取得所有的进程列表
  88.                 SQLDMO.QueryResults qr = svr.EnumProcesses(-1);
  89.                 int iColPIDNum = -1;
  90.                 int iColDbName = -1;
  91.                 //找到和要恢复数据库相关的进程
  92.                 for (int i = 1; i <= qr.Columns; i++)
  93.                 {
  94.                     string strName = qr.get_ColumnName(i);
  95.                     if (strName.ToUpper().Trim() == "SPID")
  96.                     {
  97.                         iColPIDNum = i;
  98.                     }
  99.                     else if (strName.ToUpper().Trim() == "DBNAME")
  100.                     {
  101.                         iColDbName = i;
  102.                     }
  103.                     if (iColPIDNum != -1 && iColDbName != -1)
  104.                         break;
  105.                 }
  106.                 //将相关进程关闭               
  107.                 for (int i = 1; i <= qr.Rows; i++)
  108.                 {
  109.                     int lPID = qr.GetColumnLong(i, iColPIDNum);
  110.                     string strDBName = qr.GetColumnString(i, iColDbName);
  111.                     if (strDBName.ToUpper() == _dbName)
  112.                         svr.KillProcess(lPID);
  113.                 }

  114.                 SQLDMO.Restore res = new SQLDMO.RestoreClass();

  115.                 res.Action = SQLDMO.SQLDMO_RESTORE_TYPE.SQLDMORestore_Database;
  116.                 res.Files = fileName;

  117.                 res.Database = _dbName;
  118.                 res.FileNumber = 1;

  119.                 res.ReplaceDatabase = true;
  120.                 res.SQLRestore(svr);

  121.                 return true;
  122.             }
  123.             catch (Exception err)
  124.             {
  125.                 return false;
  126.             }
  127.             finally
  128.             {
  129.                 svr.Close();
  130.             }
  131.         }

  132.         /// <summary>
  133.         /// 获得所有数据库备份文件信息,如:200704041120.
  134.         /// </summary>
  135.         /// <param name="filePath">保存备份文件的文件夹路径(不包括文件名)
  136.         /// <returns>包含文件信息的字符串组</returns>
  137.         public string[] GetAllDBBak(string filePath)
  138.         {
  139.             string[] DBBakInfo = Directory.GetFiles(filePath, "BMIS*");
  140.             int start = DBBakInfo[0].IndexOf("(");
  141.             int end = DBBakInfo[0].IndexOf(")");
  142.             //除去多余部分,返回名字中的时间信息,如:200704041120.
  143.             for (int i = 0; i < DBBakInfo.Length; i++)
  144.             {
  145.                 DBBakInfo[i] = DBBakInfo[i].Substring(start + 1, end - start - 1);
  146.             }
  147.             return DBBakInfo;
  148.         }

  149.         /// <summary>
  150.         /// 删除一个数据库备份文件
  151.         /// </summary>
  152.         /// <param name="fileName">删除的备份文件路径(包括文件名,文件名格式为:"DBName(yyyyMMddHHmm).bak")
  153.         /// <returns>操作成功返回true,否则返回false</returns>
  154.         public bool DeleteDBBak(string fileName)
  155.         {
  156.             if (File.Exists(fileName) == true)
  157.             {
  158.                 File.Delete(fileName);
  159.                 return true;
  160.             }
  161.             else
  162.             {
  163.                 return false;
  164.             }

  165.         }

  166.         #endregion
  167.     }
  168. }
复制代码


0 个回复

您需要登录后才可以回帖 登录 | 加入黑马