zoukankan      html  css  js  c++  java
  • C#+Sql数据库备份

     

    1.在项目中添加SQLDmo dll文件引用(SQLDMO(SQL Distributed Management Objects,SQL分布式管理对象))
    2在相应页面加using SQLDMO引用
    3.下面是用C#语言书写的用于Microsoft SQL Server数据库备份和恢复的类:

    using System;

    namespace DbService
    {
    /// <summary>
    /// DbOper类,主要实现对Microsoft SQL Server数据库的备份和恢复
    /// </summary>
    public sealed class DbOper
    {
    /// <summary>
    /// DbOper类的构造函数
    /// </summary>
    private DbOper()
    {
    }

    /// <summary>
    /// 数据库备份
    /// </summary>
    public static void DbBackup()
    {
    try
    {
    SQLDMO.Backup oBackup = new SQLDMO.BackupClass();
    SQLDMO.SQLServer oSQLServer = new SQLDMO.SQLServerClass();
    oSQLServer.LoginSecure = false;
    oSQLServer.Connect("localhost", "sa", "1234");
    oBackup.Action = SQLDMO.SQLDMO_BACKUP_TYPE.SQLDMOBackup_Database;
    oBackup.Database = "Northwind";
    oBackup.Files = @"d:\\Northwind.bak";
    oBackup.BackupSetName = "Northwind";
    oBackup.BackupSetDescription = "数据库备份";
    oBackup.Initialize = true;
    oBackup.SQLBackup(oSQLServer);
    }
    catch
    {
    throw;
    }
    }

    /// <summary>
    /// 数据库恢复
    /// </summary>
    public static void DbRestore()
    {
    try
    {
    SQLDMO.Restore oRestore = new SQLDMO.RestoreClass();
    SQLDMO.SQLServer oSQLServer = new SQLDMO.SQLServerClass();
    oSQLServer.LoginSecure = false;
    oSQLServer.Connect("localhost", "sa", "1234");
    oRestore.Action = SQLDMO.SQLDMO_RESTORE_TYPE.SQLDMORestore_Database;
    oRestore.Database = "Northwind";
    oRestore.Files = @"d:\\Northwind.bak";
    oRestore.FileNumber = 1;
    oRestore.ReplaceDatabase = true;
    oRestore.SQLRestore(oSQLServer);
    }
    catch
    {
    throw;
    }
    }
    }
    }
    参见在C#中运用SQLDMO备份和恢复Microsoft SQL Server数据库
    http://dev.csdn.net/develop/article/28/28564.shtm
    当不使用要恢复的数据库时以上方法可行,但当你使用了数据库时就必须杀死该进程
    代码如下:

      /// <summary>
      /// 还原数据库函数
      /// </summary>
      /// <param name="strDbName">数据库名</param>
      /// <param name="strFileName">数据库备份文件的完整路径名</param>
      /// <returns></returns>
      public bool RestoreDB(string strDbName,string strFileName)
      {
       //PBar = pgbMain ;
       SQLDMO.SQLServer svr = new SQLDMO.SQLServerClass() ;
       try
       {
        //服务器名,数据库用户名,数据库用户名密码
        svr.Connect("localhost","sa","hai") ;
        
        SQLDMO.QueryResults qr = svr.EnumProcesses(-1) ;
        int iColPIDNum = -1 ;
        int iColDbName = -1 ;
        for(int i=1;i<=qr.Columns;i++)
        {
         string strName = qr.get_ColumnName(i) ;
         if (strName.ToUpper().Trim() == "SPID")
         {
          iColPIDNum = i ;
         }
         else if (strName.ToUpper().Trim() == "DBNAME")
         {
          iColDbName = i ;
         }
         if (iColPIDNum != -1 && iColDbName != -1)
          break ;
        }
                    //杀死使用strDbName数据库的进程
        for(int i=1;i<=qr.Rows;i++)
        {
         int lPID = qr.GetColumnLong(i,iColPIDNum) ;
         string strDBName = qr.GetColumnString(i,iColDbName) ;
         if (strDBName.ToUpper() == strDbName.ToUpper())
         {
          svr.KillProcess(lPID) ;
         }
        }
                   
        SQLDMO.Restore res = new SQLDMO.RestoreClass() ;
        res.Action = 0 ;
        res.Files = strFileName ;

        res.Database = strDbName ;
        res.ReplaceDatabase = true ;
        res.SQLRestore(svr) ;
        return true ;
       }
       catch
       {
        return false;
       }
       finally
       {
        svr.DisConnect() ;
       }
      }
    你就可以通过用户设置的时间来备份数据库了,可以用定时器实现
    或是调用存储过程
    ====================================================================================

    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;
            }
  • 相关阅读:
    iOS 3DES加密
    AFNetworking实现程序重新启动时的断点续传
    iPhone缓存网络数据
    SDWebImage使用——一个可管理远程图片加载的类库
    IOS中UITableView异步加载图片的实现
    使用UIImageView展现来自网络的图片
    obj-c学习笔记
    IOS开发-发送邮件(E-mail)方法整理合集(共3种)
    设置tableView背景颜色
    Spring整合JMS(三)——MessageConverter介绍
  • 原文地址:https://www.cnblogs.com/wangweixznu/p/384749.html
Copyright © 2011-2022 走看看