使用前要导入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. mixer: 一个用go实现的mysql proxy

    介绍 mixer是一个用go实现的mysql proxy,支持基本的mysql代理功能. mysql的中间件很多,对于市面上面现有的功能强大的proxy,我主要考察了如下几个: mysql-proxy ...

  2. 【一天一道LeetCode】#67. Add Binary

    一天一道LeetCode 本系列文章已全部上传至我的github,地址:ZeeCoder's Github 欢迎大家关注我的新浪微博,我的新浪微博 欢迎转载,转载请注明出处 (一)题目 Given t ...

  3. 匿名函数,结合闭包的写法,js对象的案例

    /* * name :Zuoquan Tu * mail :tuzq@XXX.com.cn * date :2015/04/1 * version :1.1 * description:modifie ...

  4. 【翻译】在Ext JS集成第三方库

    原文地址:http://www.sencha.com/blog/integrating-ext-js-with-3rd-party-libraries/ 作者:Kevin Kazmierczak Ke ...

  5. 【Android 应用开发】Android中使用ViewPager制作广告栏效果 - 解决ViewPager占满全屏页面适配问题

    . 参考界面 : 携程app首页的广告栏, 使用ViewPager实现        自制页面效果图 : 源码下载地址: http://download.csdn.net/detail/han1202 ...

  6. 粒子系统属性Life,发射速率和总数的关系

    提示,粒子系统的life,发射速率以及总粒子数是相互影响的. 如果你要发射器射出粒子流然后停顿一会,你将简单的必须确保lifetime和发射速率相匹配以至于在发射出的粒子达到粒子总数之前一些粒子是活跃 ...

  7. LeetCode之“链表”:Linked List Cycle && Linked List Cycle II

    1.Linked List Cycle 题目链接 题目要求: Given a linked list, determine if it has a cycle in it. Follow up: Ca ...

  8. Learning ROS for Robotics Programming Second Edition学习笔记(九) indigo Gazebo rviz slam navigation

    中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 书中三维环境gazebo,slam的仿真例子 --$ r ...

  9. MFC中char*,string和CString之间的转换

    MFC中char*,string和CString之间的转换 一.    将CString类转换成char*(LPSTR)类型 方法一,使用强制转换.例如:  CString theString( &q ...

  10. JVM学习--(四)垃圾回收算法

    我们都知道java语言与C语言最大的区别就是内存自动回收,那么JVM是怎么控制内存回收的,这篇文章将介绍JVM垃圾回收的几种算法,从而了解内存回收的基本原理. stop the world 在介绍垃圾 ...