zoukankan      html  css  js  c++  java
  • [整理] C#调用SQLDMO.DLL时间数据库备份 / 还原。 (香神无涯) // C#实现SQLSERVER2000数据库备份还原的两种方法 (带进度条)

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

    SQLDMO类的使用

    分类: C# 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;
            }
  • 相关阅读:
    tcpdump抓localhost 127.0.0.1的包
    fatal: write failure on 'stdout': Bad file descriptor
    rst转html
    Call to WHvSetupPartition failed: ERROR_SUCCESS (Last=0xc000000d/87) (VERR_NEM_VM_CREATE_FAILED)
    error: 'readdir_r' is deprecated [-Werror=deprecated-declarations]
    ubuntu虚拟机设置共享后无权限
    VirtualBox怎么设置从u盘启动,虚拟机从U盘启动
    File类总结
    相对路径的写法
    systeminfo总结
  • 原文地址:https://www.cnblogs.com/meimao5211/p/3339892.html
Copyright © 2011-2022 走看看