/// <summary>
/// 通过调用MSSQL的SQLDMO.DLL文件来实现备份数据库
/// 1.首先在在项目中引用SQLDMO.DLL文件。
/// 2.在引用中的SQLDMO.DLL文件右击-->属性-->设置[嵌入互操作类型]为flash
/// </summary>
public static void DBBackup()
{
SQLDMO.Backup dbBackup = new SQLDMO.BackupClass();
SQLDMO.SQLServer sqlServer = new SQLDMO.SQLServerClass();
try
{
sqlServer.LoginSecure = false;
sqlServer.Connect("localhost", "sa", "");
dbBackup.Action = SQLDMO.SQLDMO_BACKUP_TYPE.SQLDMOBackup_Database;
dbBackup.Database = "kuang"; //数据库名字
dbBackup.Files = @"d:\kuang_bak.bak"; //备份位置
dbBackup.BackupSetName = "kuang"; //名称,在企业管理器里面选择备份的时候也有这个,貌似没用。
dbBackup.BackupSetDescription = "数据库备份"; //描述,在企业管理器里面选择备份的时候也有这个,貌似没用。
dbBackup.Initialize = true;
dbBackup.SQLBackup(sqlServer);
}
catch
{
throw;
}
finally
{
sqlServer.DisConnect();
}
}

/// <summary>
/// 通过调用MSSQL的SQLDMO.DLL文件来实现从备份文件恢复到是数据库
/// 注:恢复是数据库必须是没有链接的。清楚链接的方法:在企业管理器右击数据库-->分离数据库-->点击清楚按钮即可
/// </summary>
private void DBReply()
{
SQLDMO.Restore restore = new SQLDMO.RestoreClass();
SQLDMO.SQLServer sqlserver = new SQLDMO.SQLServerClass();
sqlserver.LoginSecure = false;
sqlserver.Connect("localhost", "sa", "");
restore.Action = SQLDMO.SQLDMO_RESTORE_TYPE.SQLDMORestore_Database;
restore.Database = "kuang";
restore.Files = @"d:\kuang_bak.bak";
restore.FileNumber = 1;
restore.SQLRestore(sqlserver);
}

在回复的过程中,需要保证数据库没有正在使用,网上看到的代码经测试没有效果,如果有朋友知道方法的恳请您回复一下,谢谢。

代码是网络上看到的,测试整理了一下,感谢原作者。

-------------------------------------------------------------------------------------------

 
  1. C#实现SQLSERVER2000数据库备份还原的两种方法
  2. :方法一(不使用SQLDMO):
  3. ///
  4. ///备份方法
  5. ///
  6. SqlConnectionconn=newSqlConnection("Server=.;Database=master;UserID=sa;Password=sa;");
  7. SqlCommandcmdBK=newSqlCommand();
  8. cmdBK.CommandType=CommandType.Text;
  9. cmdBK.Connection=conn;
  10. cmdBK.CommandText=@"backupdatabasetesttodisk='C:/ba'withinit";
  11. try
  12. {
  13. conn.Open();
  14. cmdBK.ExecuteNonQuery();
  15. MessageBox.Show("Backupsuccessed.");
  16. }
  17. catch(Exceptionex)
  18. {
  19. MessageBox.Show(ex.Message);
  20. }
  21. finally
  22. {
  23. conn.Close();
  24. conn.Dispose();
  25. }
  26. ///
  27. ///还原方法
  28. ///
  29. SqlConnectionconn=newSqlConnection("Server=.;Database=master;UserID=sa;Password=sa;Trusted_Connection=False");
  30. conn.Open();
  31. //KILLDataBaseProcess
  32. SqlCommandcmd=newSqlCommand("SELECTspidFROMsysprocesses,sysdatabasesWHEREsysprocesses.dbid=sysdatabases.dbidANDsysdatabases.Name='test'",conn);
  33. SqlDataReaderdr;
  34. dr=cmd.ExecuteReader();
  35. ArrayListlist=newArrayList();
  36. while(dr.Read())
  37. {
  38. list.Add(dr.GetInt16(0));
  39. }
  40. dr.Close();
  41. for(inti=0;i<list.Count;i++)
  42. {
  43. cmd=newSqlCommand(string.Format("KILL{0}",list),conn);
  44. cmd.ExecuteNonQuery();
  45. }
  46. SqlCommandcmdRT=newSqlCommand();
  47. cmdRT.CommandType=CommandType.Text;
  48. cmdRT.Connection=conn;
  49. cmdRT.CommandText=@"restoredatabasetestfromdisk='C:/ba'";
  50. try
  51. {
  52. cmdRT.ExecuteNonQuery();
  53. MessageBox.Show("Restoresuccessed.");
  54. }
  55. catch(Exceptionex)
  56. {
  57. MessageBox.Show(ex.Message);
  58. }
  59. finally
  60. {
  61. conn.Close();
  62. }
  63. 方法二(使用SQLDMO):
  64. ///
  65. ///备份方法
  66. ///
  67. SQLDMO.Backupbackup=newSQLDMO.BackupClass();
  68. SQLDMO.SQLServerserver=newSQLDMO.SQLServerClass();
  69. //显示进度条
  70. SQLDMO.BackupSink_PercentCompleteEventHandlerprogress=newSQLDMO.BackupSink_PercentCompleteEventHandler(Step);
  71. backup.PercentComplete+=progress;
  72. try
  73. {
  74. server.LoginSecure=false;
  75. server.Connect(".","sa","sa");
  76. backup.Action=SQLDMO.SQLDMO_BACKUP_TYPE.SQLDMOBackup_Database;
  77. backup.Database="test";
  78. backup.Files=@"D:/test/myProg/backupTest";
  79. backup.BackupSetName="test";
  80. backup.BackupSetDescription="Backupthedatabaseoftest";
  81. backup.Initialize=true;
  82. backup.SQLBackup(server);
  83. MessageBox.Show("Backupsuccessed.");
  84. }
  85. catch(Exceptionex)
  86. {
  87. MessageBox.Show(ex.Message);
  88. }
  89. finally
  90. {
  91. server.DisConnect();
  92. }
  93. this.pbDB.Value=0;
  94. ///
  95. ///还原方法
  96. ///
  97. SQLDMO.Restorerestore=newSQLDMO.RestoreClass();
  98. SQLDMO.SQLServerserver=newSQLDMO.SQLServerClass();
  99. //显示进度条
  100. SQLDMO.RestoreSink_PercentCompleteEventHandlerprogress=newSQLDMO.RestoreSink_PercentCompleteEventHandler(Step);
  101. restore.PercentComplete+=progress;
  102. //KILLDataBaseProcess
  103. SqlConnectionconn=newSqlConnection("Server=.;Database=master;UserID=sa;Password=sa;Trusted_Connection=False");
  104. conn.Open();
  105. SqlCommandcmd=newSqlCommand("SELECTspidFROMsysprocesses,sysdatabasesWHEREsysprocesses.dbid=sysdatabases.dbidANDsysdatabases.Name='test'",conn);
  106. SqlDataReaderdr;
  107. dr=cmd.ExecuteReader();
  108. ArrayListlist=newArrayList();
  109. while(dr.Read())
  110. {
  111. list.Add(dr.GetInt16(0));
  112. }
  113. dr.Close();
  114. for(inti=0;i<list.Count;i++)
  115. {
  116. cmd=newSqlCommand(string.Format("KILL{0}",list),conn);
  117. cmd.ExecuteNonQuery();
  118. }
  119. conn.Close();
  120. try
  121. {
  122. server.LoginSecure=false;
  123. server.Connect(".","sa","sa");
  124. restore.Action=SQLDMO.SQLDMO_RESTORE_TYPE.SQLDMORestore_Database;
  125. restore.Database="test";
  126. restore.Files=@"D:/test/myProg/backupTest";
  127. restore.FileNumber=1;
  128. restore.ReplaceDatabase=true;
  129. restore.SQLRestore(server);
  130. MessageBox.Show("Restoresuccessed.");
  131. }
  132. catch(Exceptionex)
  133. {
  134. MessageBox.Show(ex.Message);
  135. }
  136. finally
  137. {
  138. server.DisConnect();
  139. }
  140. this.pbDB.Value=0;
 
分类: C#2006-12-19 17:50 718人阅读 评论(0) 收藏 举报

SQLDMO(SQL Distributed Management Objects,SQL分布式管理对象)封装 Microsoft SQL Server 2000 数据库中的对象。SQL-DMO 允许用支持自动化或 COM 的语言编写应用程序,以管理 SQL Server 安装的所有部分。SQL-DMO 是 SQL Server 2000 中的 SQL Server 企业管理器所使用的应用程序接口 (API);因此使用 SQL-DMO 的应用程序可以执行 SQL Server 企业管理器执行的所有功能。

SQL-DMO 用于必须包含 SQL Server 管理的任何自动化或 COM 应用程序,例如: 
1.封装 SQL Server 作为自己的数据存储并想尽量减少用户的 SQL Server 管理任务的应用程序。
2.在程序本身并入了专门的管理逻辑的应用程序。
3.想在自己的用户界面中集成 SQL Server 管理任务的应用程序。

SQLDMO对象来自SQLDMO.dll,SQLDMO.dll是随SQL Server2000一起发布的。SQLDMO.dll自身是一个COM对象,因此,在你的.NET项目里必须先引用它。

private void Button3_Click(object sender, System.EventArgs e)
{
    //引用SQLDMO.dll,SQLDMO由Microsoft SQL Server自带的SQLDMO.dll提供,SQLDMO.dll是一个COM对象
    SQLDMO.Backup backup=new SQLDMO.BackupClass();
    SQLDMO.SQLServer sqlserver=new SQLDMO.SQLServerClass();
    sqlserver.LoginSecure=false;
    sqlserver.Connect("localhost","sa","1");
    backup.Action=SQLDMO.SQLDMO_BACKUP_TYPE.SQLDMOBackup_Database;
    backup.Database="userdb";
    backup.Files=@"E:/Project/meng/data/userdb.bak";
    backup.BackupSetName="userdb";
    backup.BackupSetDescription="数据库备份";
    backup.Initialize=true;
    backup.SQLBackup(sqlserver);
}

private void Button4_Click(object sender, System.EventArgs e)
{
    SQLDMO.Restore restore=new SQLDMO.RestoreClass();
    SQLDMO.SQLServer sqlserver=new SQLDMO.SQLServerClass();
    sqlserver.LoginSecure=false;
    sqlserver.Connect("192.168.19.25","sa","sa");            restore.Action=SQLDMO.SQLDMO_RESTORE_TYPE.SQLDMORestore_Database;
    restore.Database="userdb";
    restore.Files=@"E:/Project/meng/data/userdb.bak";
    restore.BackupSetName="userdb";            
    restore.FileNumber=1;
    restore.SQLRestore(sqlserver);
}
//得到指定SQL服务器所有数据库的列表
        public ArrayList GetDataBaseList(string ServerName,string UserName,string Pwd)
        {
            ArrayList list = new ArrayList() ; 
            SQLDMO.Application sqlApp = new SQLDMO.Application() ; 
            SQLDMO.SQLServer oServer = new SQLDMO.SQLServer() ; 
            
            oServer.Connect(ServerName,UserName,Pwd);
            foreach(SQLDMO.Database db in oServer.Databases) 
            { 
                if((db.Name!=null) && (db.SystemObject == false))
                    list.Add(db.Name);
            }             
            return list ; 
        }

        //得到SQL服务器的列表
        public ArrayList GetSqlServerList()
        {    
            ArrayList list = new ArrayList() ; 
            SQLDMO.Application sqlApp = new SQLDMO.Application();            
            SQLDMO.NameList ServerName = sqlApp.ListAvailableSQLServers();            
            for(int i=0;i<ServerName.Count;i++)
            {
                list.Add(ServerName.Item(i+1));
            }            
            return list;
        }

[整理] C#调用SQLDMO.DLL时间数据库备份 / 还原。 (香神无涯) // C#实现SQLSERVER2000数据库备份还原的两种方法 (带进度条)的更多相关文章

  1. C++调用DLL有两种方法——静态调用和动态调用

    C++调用DLL有两种方法——静态调用和动态调用 标签: dllc++winapinullc 2011-09-09 09:49 11609人阅读 评论(0) 收藏 举报  分类: cpp(30)  [ ...

  2. 织梦首页、列表页调用文章body内容的两种方法

    http://blog.csdn.net/langyu1021/article/details/52261411 关于首页.列表页调用文章body内容的两种方法,具体方法如下: 第一种方法: {ded ...

  3. 转载]PhpCms V9调用指定栏目子栏目文章的两种方法

    PhpCms V9调用指定栏目子栏目文章的两种方法 第一种.直接写子栏目id ,用cat in {pc:get sql="SELECT * from v9_news where status ...

  4. C++连接mysql数据库的两种方法

    本文主要介绍了C++连接mysql数据库的两种方法,希望通过本文,能对你有所帮助,一起来看. 现在正做一个接口,通过不同的连接字符串操作不同的数据库.要用到mysql数据库,以前没用过这个数据库,用a ...

  5. C#实现Dll(OCX)控件自动注册的两种方法 网上找的 然后 自己试了试 还是可以用的

    尽管MS为我们提供了丰富的.net framework库,我们的程序C#开发带来了极大的便利,但是有时候,一些特定功能的控件库还是需要由第三方提供或是自己编写.当需要用到Dll引用的时候,我们通常会通 ...

  6. C#实现Dll(OCX)控件自动注册的两种方法

    尽管MS为我们提供了丰富的.net framework库,我们的程序C#开发带来了极大的便利,但是有时候,一些特定功能的控件库还是需要由第三方提供或是自己编写.当需要用到Dll引用的时候,我们通常会通 ...

  7. 在Delphi中使用C++对象(两种方法,但都要改造C++提供的DLL)

    Delphi是市场上最好的RAD工具,但是现在C++占据着主导地位,有时针对一个问题很难找到Delphi或Pascal的解决方案.可是却可能找到了一个相关的C++类.本文描述几种在Delphi代码中使 ...

  8. C#自动实现Dll(OCX)控件注册的两种方法

    尽管MS为我们提供了丰富的.net framework库,我们的程序C#开发带来了极大的便利,但是有时候,一些特定功能的控件库还是需要由第三方提供或是自己编写.当需要用到Dll引用的时候,我们通常会通 ...

  9. SQL Server中灾难时备份结尾日志(Tail of log)的两种方法

    转自:http://www.cnblogs.com/CareySon/archive/2012/02/23/2365006.html SQL Server中灾难时备份结尾日志(Tail of log) ...

随机推荐

  1. 第二个Activity返回数据

    背景内容:FirstActivity先跳转到TwoActivity,再由TwoActivity返回,并还返回数据. 一般情况下Activity间跳转只需要调用 startActivity(Intent ...

  2. 基于openstack平台的几种Cloud DB解决方案

    方案一.openstack 官方 trove解决方案 此方案进行过镜像的打包,由于网络问题,还未能成功实现 方案二.salt 或者ansible+ docker 由于 docker部署数据库,在数据库 ...

  3. 如何解决Win10预览版一闪而过的disksnapshot.exe进程?

    Win10之家讯上周微软如约向Insider用户推送了Win10预览版10576更新,本次更新修复了之前版本中存在的一些问题,从日常使用的情况来看,对比之前的预览版系统要更稳定了一些,但是还是存在一些 ...

  4. snprintf不能使用"字符串指针"赋值,可以使用字符数组

    #cat snprintf.c #include <stdio.h> #include <stdlib.h> #include <string.h> struct ...

  5. HDU114 - Piggy-Bank 【完全背包】

    在 ACM 能够开展之前,必须准备预算,并获得必要的财力支持.该活动的主要收入来自于 Irreversibly Bound Money (IBM).思路很简单.任何时候,某位 ACM 会员有少量的钱时 ...

  6. redis下载安装配置教程

    参考 https://www.cnblogs.com/taostaryu/p/9481749.html 上面做完后, 打开客户端 $ redis-cli 以上命令将打开以下终端: redis 127. ...

  7. NOIP2018 滚粗记

    Day -2  上午,大家都在复习各种模板,zhx总结了足足67个模板(杨辉三角也算模板???),lgl死磕FFT发现cos和sin打反了,我也是复习板子和以前做过的题,几乎没有人颓. 接着jdr,l ...

  8. 第三节:初识pandas之DataFrame(上)

    DataFrame是Python中Pandas库中的一种数据结构,它类似excel,是一种二维表.

  9. 1 Ipython、Jupyter 入门

    为什么使用Python进行数据分析:     1 Python大量的库为数据分析和处理提供了完整的工具集     2 比起R和Matlab等其他主要用于数据分析的编程语言,Python更全能     ...

  10. mode-c++

    /*感谢机房JYW的友情馈赠*/#include <iostream> #include <cstdio> #include <cstring> #include ...