使用前要导入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. (NO.00003)iOS游戏简单的机器人投射游戏成形记(十二)

    回到Xcode,新建Level1类,继承于CCNode. 打开Level1.m在初始化方法中添加如下方法: -(void)didLoadFromCCB{ [self initBasket]; [sel ...

  2. Android-获取全局Context的技巧-android学习之旅(68)

    我们经常需要获取全局的Context ,比如弹出Toast,启动活动,服务,接收器,还有自定义控件,操作数据库,使用通知等 通常的方法是在调用的地方传入Context参数 ,有时候这种不会奏效,教给大 ...

  3. Python学习笔记 - dict和set

    dict #!/usr/bin/env python3 # -*- coding: utf-8 -*- #dict >>> d = {'Michael': 95, 'Bob': 75 ...

  4. OC利用ijkplayer框架按照步骤集成实现电视直播

    一. 下载ijkplayer ijkplayer下载地址:https://github.com/Bilibili/ijkplayer 下载完成后解压, 解压后文件夹内部目录如下图: ijkplayer ...

  5. UE4 Hello World 创建第一个UE4工程

    首先先熟悉几个UE4常用的类 AGameMode(控制整个项目的逻辑) The GameMode defines the game being played. It governs thegame r ...

  6. android 开发Handler源码剖析

    Android的消息机制主要是Handler的运行机制,而讲Handler的机制,又需要和MessageQueue和Looper结合.MessageQueue中文意思是消息队列,虽说叫队列,但是其内部 ...

  7. SpriteBuilder中的loadAsScene:方法的返回值

    见如下代码: CCScene *scene = [CCBReader loadAsScene:@"GameScene"]; GameScene *gameScene = (Game ...

  8. Android高级控件(四)——VideoView 实现引导页播放视频欢迎效果,超级简单却十分的炫酷

    Android高级控件(四)--VideoView 实现引导页播放视频欢迎效果,超级简单却十分的炫酷 是不是感觉QQ空间什么的每次新版本更新那炫炫的引导页就特别的激动,哈哈,其实他实现起来真的很简单很 ...

  9. PS图像特效算法——百叶窗

    这个只要设置好条纹的宽度和条纹的间隔,建立一个遮罩层,等间隔的对原图进行等间距的遮罩. clc; clear all; Image=imread('4.jpg'); Image=double(Imag ...

  10. 为什么我们要使用ssh框架技术,及感想

    前言: 在公司从C++转向Java Web方向大概有3个月(11月初-1月底)了.三个月前对Java和Web还几乎是零基础.然后从安装Eclipse,MySQL,tomcat开始,到学习HTML/CS ...