使用前要导入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. JSP编译成Servlet(二)语法树的遍历——访问者模式

    语法树可以理解成是一种数据结构,假如某些语句已经被解析成一棵语法树,那么接下来就是要对此语法树进行处理,但考虑到不将处理操作与数据结构混合在一块,我们需要一种方法将其分离.其实对于语法树的处理最典型的 ...

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

    没想到翻译这篇<Gradle 插件用户指南>拖了差不多一个月,还跨年了.不过还好,在2号时终于一口气把剩下的给翻译完了(其实那天剩下的也就不到一章). 今天先发一下第六章,明天再发第七章. ...

  3. mpi中程序在集群中的分发

    我们在开发mpi程序时,由于其是分布式程序,我们在单个节点上完成编码后,需要将代码拷贝到整个集群进行测试.集群之间的文件拷贝可以通过scp命令完成.但是scp命令是针对两个节点之间文件互传设计,为了将 ...

  4. 实例分析exec函数

    fork()函数通过系统调用创建一个与原来进程(父进程)几乎完全相同的进程(子进程是父进程的副本,它将获得父进程数据空间.堆.栈等资源的副本.注意,子进程持有的是上述存储空间的"副本&quo ...

  5. 谈谈javascript 中的函数问题

    聊聊javascript中的函数 本文可作为李刚<疯狂htmlcssjavas讲义>的学习笔记 先说一个题外话 前几天在知乎上流传着一个对联  上联是雷锋推到雷峰塔 nnd 这是什么对联? ...

  6. Android虚拟机 USB转串口调试方法

    有时候需要在虚拟机调试串口,首先安装串口的驱动程序(不知道的话可以用驱动精灵),然后打开设备管理器找到驱动,查看驱动使用的端口(比如COM3),虚拟机需要在命令行启动: 将SDK下的tools文件夹加 ...

  7. Android不同系统版本依然能调用到正确的API方法Demo——Service调用startForeground举例

    private static final Class<?>[] mSetForegroundSignature = new Class[] { boolean.class}; privat ...

  8. 蘑菇街Android组件与插件化

    插件化的基石 -- apk动态加载 随着我街业务的蓬勃发展,产品和运营随时上新功能新活动的需求越来越强烈,经常可以听到"有个功能我想周x上,行不行".行么?当然是不行啦,上新功能得 ...

  9. nfc近场通信

    NFC简介: Near Field Communication 近场通信,是一种数据传输技术. 与wifi.蓝牙.红外线等数据传输技术的一个主要差异就是有效距离一般不能超过4cm. NFC支持3种工作 ...

  10. shell脚本调用python脚本的路径问题

    脚本的相互调用中,只有在同一级目录下才可以使用__file__参数去获取路径名,(在shell里使用pwd也同样),否则,使用的就是主文件(最开始运行的脚本程序)的所在位置,是错误路径:一定要注意当期 ...