使用前要导入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. 谈谈Ext JS的组件——组件基类:Ext.Component

    概述 Ext.Component是所有Ext组件的基类,这在Ext.Component的API中第一句话就提到了.然后第二段说明了它包含的基本功能:隐藏/显示.启用/禁用以及尺寸控制等.除了以上这些基 ...

  2. 将Ext JS 5应用程序导入Web项目以及实现本地化

    在Ext JS 5,使用了新的脚本和样式加载方式,这对于将应用程序导入到Web项目中产生了点小麻烦.而对于本地化文件的导入,也采用了新的方式,本文将一一解答这些问题. 将Ext JS 5应用程序导入W ...

  3. 4.1、Libgdx的生命周期

    (原文:http://www.libgdx.cn/topic/32/4-1-libgdx%E7%9A%84%E7%94%9F%E5%91%BD%E5%91%A8%E6%9C%9F) 一个libgdx应 ...

  4. ant的设置properties

    特点 大小写敏感: 不可改变,先到先得,谁先设定,之后的都不能改变. 怎样设置 1 .设置 name 和 value 属性值,比如: <property name="srcdir&qu ...

  5. 文件I/O实践(2) --文件stat

    功能:获取文件元数据 #include <sys/types.h> #include <sys/stat.h> #include <unistd.h> int st ...

  6. 实用Android 屏幕适配方案分享

    转载地址:http://blog.csdn.net/gao_chun/article/details/45645051 真正可用,并且简单易行,可以在多个屏幕大小和屏幕密度上有良好表现的Android ...

  7. 使用Multiplayer Networking做一个简单的多人游戏例子-3/3(Unity3D开发之二十七)

    使用Multiplayer Networking做一个简单的多人游戏例子-1/3 使用Multiplayer Networking做一个简单的多人游戏例子-2/3 使用Multiplayer Netw ...

  8. 【Visual C++】游戏编程学习笔记之一:五毛钱特效之透明和半透明处理

    本系列文章由@二货梦想家张程 所写,转载请注明出处. 本文章链接:http://blog.csdn.net/terence1212/article/details/44163799 作者:ZeeCod ...

  9. Java-ServletContextListener

    /** * Implementations of this interface receive notifications about * changes to the servlet context ...

  10. 【数值分析】误差的分析与减少及Matlab解线性方程的四种方法

    1.误差的来源 模型误差:数学模型与实际问题之间的误差 观测误差:测量数据与实际数据的误差 方法误差:数学模型的精确解与数值方法得到的数值解之间的误差:例如 舍入误差:对数据进行四舍五入后产生的误差 ...