使用前要导入SQLDMO.dll

下载地址:http://down.51cto.com/data/853937

1.在用户的配置时,我们需要列出当前局域网内所有的数据库服务器,并且要列出指定服务器的所有数据库,实现代码如下:

取得数据库服务器列表:


  1. public ArrayList GetServerList()

  2. {

  3. ArrayList alServers = new ArrayList() ;

  4. SQLDMO.Application sqlApp = new SQLDMO.ApplicationClass() ;

  5. try

  6. {

  7. SQLDMO.NameList serverList = sqlApp.ListAvailableSQLServers() ;

  8. for(int i = 1;i<= serverList.Count;i++)

  9. {

  10. alServers.Add(serverList.Item(i)) ;

  11. }

  12. }

  13. catch(Exception e)

  14. {

  15. throw(new Exception("取数据库服务器列表出错:"+e.Message)) ;

  16. }

  17. finally

  18. {

  19. sqlApp.Quit() ;

  20. }

  21. return alServers ;

  22. }

取得指定数据库服务器的数据库列表


  1. public ArrayList GetDbList(string strServerName,string strUserName,string strPwd)

  2. {

  3. ServerName = strServerName ;

  4. UserName = strUserName ;

  5. Password = strPwd ;

  6. ArrayList alDbs = new ArrayList() ;

  7. SQLDMO.Application sqlApp = new SQLDMO.ApplicationClass() ;

  8. SQLDMO.SQLServer svr = new SQLDMO.SQLServerClass() ;

  9. try

  10. {

  11. svr.Connect(ServerName,UserName,Password) ;

  12. foreach(SQLDMO.Database db in svr.Databases)

  13. {

  14. if(db.Name!=null)

  15. alDbs.Add(db.Name) ;

  16. }

  17. }

  18. catch(Exception e)

  19. {

  20. throw(new Exception("连接数据库出错:"+e.Message)) ;

  21. }

  22. finally

  23. {

  24. svr.DisConnect() ;

  25. sqlApp.Quit() ;

  26. }

  27. return alDbs ;

  28. }

 

2.数据库的备份和实时进度显示代码:


  1. public bool BackUPDB(string strDbName,string strFileName, ProgressBar pgbMain)

  2. {

  3. PBar = pgbMain ;

  4. SQLDMO.SQLServer svr = new SQLDMO.SQLServerClass() ;

  5. try

  6. {

  7. svr.Connect(ServerName,UserName,Password) ;

  8. SQLDMO.Backup bak = new SQLDMO.BackupClass();

  9. bak.Action =  ;

  10. bak.Initialize = true ;

  11. SQLDMO.BackupSink_PercentCompleteEventHandler pceh =

  12. new SQLDMO.BackupSink_PercentCompleteEventHandler(Step);

  13. bak.PercentComplete += pceh;

  14. bak.Files = strFileName;

  15. bak.Database = strDbName;

  16. bak.SQLBackup(svr);

  17. return true ;

  18. }

  19. catch(Exception err)

  20. {

  21. throw(new Exception("备份数据库失败"+err.Message)) ;

  22. }

  23. finally

  24. {

  25. svr.DisConnect() ;

  26. }

  27. }

  28. private void Step(string message,int percent)

  29. {

  30. PBar.Value = percent ;

  31. }


其中,这两个语句实现了进度的实时显示:

SQLDMO.BackupSink_PercentCompleteEventHandler pceh = new      SQLDMO.BackupSink_PercentCompleteEventHandler(Step); 
    bak.PercentComplete  += pceh;

Step就是上面private void Step(string message,int percent)  的方法名称,它用来显示进度条的当前进度。

3.数据库的恢复和杀死进程的代码:


  1. public bool RestoreDB(string strDbName,string strFileName, ProgressBar pgbMain)

  2. {

  3. PBar = pgbMain ;

  4. SQLDMO.SQLServer svr = new SQLDMO.SQLServerClass() ;

  5. try

  6. {

  7. svr.Connect(ServerName,UserName,Password) ;

  8. SQLDMO.QueryResults qr = svr.EnumProcesses(-1) ;

  9. int iColPIDNum = -1 ;

  10. int iColDbName = -1 ;

  11. for(int i=1;i<=qr.Columns;i++)

  12. {

  13. string strName = qr.get_ColumnName(i) ;

  14. if (strName.ToUpper().Trim() == "SPID")

  15. {

  16. iColPIDNum = i ;

  17. }

  18. else if (strName.ToUpper().Trim() == "DBNAME")

  19. {

  20. iColDbName = i ;

  21. }

  22. if (iColPIDNum != -1 && iColDbName != -1)

  23. break ;

  24. }

  25. for(int i=1;i<=qr.Rows;i++)

  26. {

  27. int lPID = qr.GetColumnLong(i,iColPIDNum) ;

  28. string strDBName = qr.GetColumnString(i,iColDbName) ;

  29. if (strDBName.ToUpper() == strDbName.ToUpper())

  30. svr.KillProcess(lPID) ;

  31. }

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

  33. res.Action = 0 ;

  34. SQLDMO.RestoreSink_PercentCompleteEventHandler pceh =

  35. new SQLDMO.RestoreSink_PercentCompleteEventHandler(Step);

  36. res.PercentComplete += pceh;

  37. res.Files = strFileName ;

  38. res.Database = strDbName ;

  39. res.ReplaceDatabase = true ;

  40. res.SQLRestore(svr) ;

  41. return true ;

  42. }

  43. catch(Exception err)

  44. {

  45. throw(new Exception("恢复数据库失败,请关闭所有和该数据库连接的程序!"+err.Message)) ;

  46. }

  47. finally

  48. {

  49. svr.DisConnect() ;

  50. }

  51. }


其中这个语句取得了所有的进程列表:

SQLDMO.QueryResults qr = svr.EnumProcesses(-1) ;

下面的语句找到和要恢复数据库相关的进程并杀死:


  1. int iColPIDNum = -1 ;

  2. int iColDbName = -1 ;

  3. for(int i=1;i<=qr.Columns;i++)

  4. {

  5. string strName = qr.get_ColumnName(i) ;

  6. if (strName.ToUpper().Trim() == "SPID")

  7. {

  8. iColPIDNum = i ;

  9. }

  10. else if (strName.ToUpper().Trim() == "DBNAME")

  11. {

  12. iColDbName = i ;

  13. }

  14. if (iColPIDNum != -1 && iColDbName != -1)

  15. break ;

  16. }

  17. for(int i=1;i<=qr.Rows;i++)

  18. {

  19. int lPID = qr.GetColumnLong(i,iColPIDNum) ;

  20. string strDBName = qr.GetColumnString(i,iColDbName) ;

  21. if (strDBName.ToUpper() == strDbName.ToUpper())

  22. svr.KillProcess(lPID) ;

  23. }

C#备份及还原数据库的实现的更多相关文章

  1. ASP.NET中使用代码来进行备份和还原数据库

    ASP.NET中使用代码来进行备份和还原数据库  SQL代码: 1 2 3 4 5 -- 备份数据库 backup database db_CSManage to disk='c:\backup.ba ...

  2. MSSQL - 备份和还原数据库

    SQL语句备份和还原数据库:http://blog.csdn.net/liuhelong/article/details/3335687 1.MSSQL - SqlServer:此数据库处于单用户模式 ...

  3. 使用.net备份和还原数据库

    原文:使用.net备份和还原数据库 CSDN网友的提问http://community.csdn.net/Expert/TopicView3.asp?id=4929678C#实现SQLSERVER20 ...

  4. 在ASP.NET中备份和还原数据库

        昨天看了<C#项目实录>中的进销存管理系统,和其他书里讲的案例一样,无非也就是数据库增删查改,但是这个进销存系统中有一个备份和还原数据库的功能,蛮有兴趣的,看了一下代码,原来如此, ...

  5. mysql备份、还原数据库(命令行)

    这里记录下MySQL如何通过命令行备份和还原数据库. 简单的三个步骤 方法很简单,可以分为三个步骤: 1.打开cmd控制台(命令行). 2.输入相应命令完成备份还原操作. 3.关闭cmd控制台. 就和 ...

  6. php 备份和还原数据库

    ignore_user_abort();//关掉浏览器,PHP脚本也可以继续执行. set_time_limit(0);// 通过set_time_limit(0)可以让程序无限制的执行下去 $int ...

  7. mysql备份与还原 数据库的常用命令。

    一.备份数据: Mysqldump常用命令: mysqldump -u用户名 -p密码 --databases 数据库1 数据库2 > xxx.sql 常见选项: -u: 用户名 -p: 密码 ...

  8. SQL语句备份和还原数据库

    1,使用SQL最简单备份,还原数据库 1 /* 备份 */ 2 backup database Test to disk='D:/Test.bak' 3 /* 还原 */ 4 restore data ...

  9. 转!mysql备份与还原数据库

    备份数据库:1) mysqldump -uroot -p db_name > 20181018_preprod_bak.sql2) 输入数据库密码 还原数据库:1. 系统命令行:mysqladm ...

  10. Sql server 数据库的备份和还原数据库提示“ 加载的介质已格式化为支持 1 个介质簇,但根据指定的备份设备,应支持 2 个介质簇”

     数据库备份和还原总结 在 "M:\2017-Pro\company\other\databak_2014-10\anquanbaowei_db_201704300200.BAK" ...

随机推荐

  1. 小强的HTML5移动开发之路(9)——坦克大战游戏3

    来自:http://blog.csdn.net/dawanganban/article/details/17754235 上一篇我们创建了敌人的坦克和自己的坦克,接下来就应该让坦克发子弹了,我们下面来 ...

  2. 解决log4cxx退出时的异常

    解决log4cxx退出时的异常(金庆的专栏)如果使用log4cxx的FileWatchdog线程来监视日志配置文件进行动态配置,就可能碰到程序退出时产生的异常.程序退出时清理工作耗时很长时,该异常很容 ...

  3. 小强的HTML5移动开发之路(6)——Canvas图形绘制基础

    来自:http://blog.csdn.net/dawanganban/article/details/17686039 在前面提到Canvas是HTML5中一个重要特点,canvas功能非常强大,用 ...

  4. 解决Fragment中使用地图,切换会闪一下黑屏的问题

    我用的是高德的3D地图,用2D地图无此问题. 从答案来看,大概是SurfactView与Fragment之间的问题.虽然我用的是高德,不过这方法估计对百度地图也有效. 解决方法是,在使用到地图的Act ...

  5. Android官方技术文档翻译——Gradle 插件用户指南(7)

    本文译自Android官方技术文档<Gradle Plugin User Guide>,原文地址:http://tools.android.com/tech-docs/new-build- ...

  6. Java四种引用类型

    纸上得来终觉浅,绝知此事要躬行  --陆游    问渠那得清如许,为有源头活水来  --朱熹 Java从1.2版本开始引入了4种引用,这四种引用的级别由高到低依次为:强引用>软引用>弱引用 ...

  7. 配置hadoop-1.2.1 eclipse开发环境

    写这篇文章的目的是记录解决配置过程中的问题 首先我们先看下这篇博文 配置hadoop-1.2.1 eclipse开发环境 但是在[修改 Hadoop 源码]这里,作者发布的 hadoop-core-1 ...

  8. Retinex图像增强算法

    前一段时间研究了一下图像增强算法,发现Retinex理论在彩色图像增强.图像去雾.彩色图像恢复方面拥有很好的效果,下面介绍一下我对该算法的理解. Retinex理论 Retinex理论始于Land和M ...

  9. Sping--ApplicationEvent

    //让其他的应用事件继承它 public abstract class ApplicationEvent extends EventObject { /** use serialVersionUID ...

  10. 深入浅出Cocoa多线程编程之 block 与 dispatch quene

    深入浅出 Cocoa 多线程编程之 block 与 dispatch quene 罗朝辉(http://www.cppblog.com/kesalin CC 许可,转载请注明出处 block 是 Ap ...