/// <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;
        }

最新文章

  1. [老文章搬家] 关于 Huffman 编码
  2. Window远程连接Linux系统(CentOS7)
  3. 修复 XE7 update1 发布 iOS 8.x 实机问题
  4. ICC的sacn-wise和unit-wise
  5. [转]解决GET请求时中文乱码的问题
  6. java的安装环境配置详细步骤
  7. 【转】selenium之 定位以及切换frame
  8. c++嵌套类-内存分配
  9. NPM使用
  10. OC: NSString、NSArray、NSNumber
  11. Sublime Text 备忘
  12. LeetCode Excel Sheet Column Title (输出excel表的列名称)
  13. nginx往后端转发时需要注意的两个问题
  14. ZigBee研究之旅(二)
  15. UILabel 的使用
  16. python json.dumps()函数输出json格式,使用ensure_ascii参数对中文输入的支持
  17. 史上最简单的SpringCloud教程 | 第二篇: 服务消费者(rest+ribbon)
  18. 用xcode9编译出ios越狱机程序使用的dylib
  19. 从零开始学 Web 之 JavaScript 高级(一)原型,贪吃蛇案例
  20. 【iCore1S 双核心板_ARM】例程十二:DMA实验——存储器到存储器的传输

热门文章

  1. jQuery——切换toggle
  2. jmeter解决中文乱码问题
  3. linux中集群的免秘钥SSH直接登录
  4. ubuntu14.04禁用USB外存储设备
  5. mysql中having和where区别?
  6. [luogu2148 SDOI2009] E&amp;D (博弈论)
  7. 使用 Cordova 打包 app
  8. 优雅到骨子里的Requests
  9. RestEasy 用户指南----第4章.使用@Path @GET @POST 等
  10. noip模拟赛 站军姿