sql="BACKUP DATABASE Northwind TO DISK = 'c:\Northwind.bak' with init"

解决方案 »

  1.   

    using SQLDMO;protected Backup2Class backup=new Backup2Class();
    private void startBackup_Click(object sender, System.EventArgs e)
    {
    string servername;
    string login;
    string password;
    string databasename;
    string serverpathname;
    if(Session["personnelID"]==null)
    {
    Label1.Text="请您重新登陆本系统!";
    return;
    }
    if(checkText().Length!=0)
    {
    Label1.Text=checkText()+" 不能为空!";
    return;
    }
    servername=serverName.Text.Trim();
    login=loginName.Text.Trim();
    password=passWord.Text.Trim()+"";
    databasename=databaseName.Text.Trim();
    serverpathname=serverpathName.Text.Trim(); sqldmoSQLServer.LoginSecure=false;
    try
    {
    sqldmoSQLServer.Connect(servername,login,password); databases=sqldmoSQLServer.Databases;
    database2=(Database2)databases.Item(databasename,null); backup.PercentCompleteNotification=1; backup.Database=database2.Name;
    backup.Files=@serverpathname;

    backup.SQLBackup(sqldmoSQLServer);
    Label1.Text="完成备份!";
    }
    catch(Exception ex)
    {
    Label1.Text=ex.Message.ToString();
    }
    catch
    {
    Label1.Text="备份失败!";
    }
    finally
    {
    SqldmoClear();
    }
    }
    private void SqldmoClear()
    {
    sqldmoSQLServer.DisConnect();
    sqldmoSQLServer.Close();
    backup=null;
    sqldmoSQLServer=null;
    }
    private string checkText()
    {
    string strState="";
    if(serverName.Text.Trim().Length==0)
    {
    strState="Server Name";
    return strState;
    }
    if(loginName.Text.Trim().Length==0)
    {
    strState="Administrators";
    return strState;
    }
    if(databaseName.Text.Trim().Length==0)
    {
    strState="Database Name";
    return strState;
    }
    if(serverpathName.Text.Trim().Length==0)
    {
    strState="[Server Path] Backup To";
    return strState;
    }
    return strState;
    }
      

  2.   

    to iceflylee(冠甄.net):
    为什么我的vs.net找不到SQLDMO的名字空间?
      

  3.   

    SQLDMO的确强大,你需要在VS.NET中添加COM引用.
      

  4.   

    给你一个备份的存储过程你调用就可以了:
    create   PROCEDURE  GY_DBBak  
              @bakequip    int,         --  备份设备:磁盘&磁带  
              @bakpath     varchar(50), --  带全路径的备份文件名  
              @baktype     int,         --  完全备份&增量备份  
              @baklog      int,         --  ‘0’备份日志  
              @bakdb       int,         --  ‘0’备份数据库  
              @kind  varchar(7),        --备份还是恢复  
              
      @retmsg  varchar(20)  output     --返回信息  
    AS  
       DECLARE  @DevName_data    varchar(50)  
       DECLARE  @DevName_log   varchar(50)
       declare @db_path varchar(100)
       declare @log_path varchar(100)
           
       DECLARE  @RC INT     SELECT    @db_path    =  @bakpath    +  '.dat'  
    SELECT    @log_path   =  @bakpath    +  'log.dat'  
            SELECT    @RC=0
            select  @DevName_data='dali',@DevName_log='dalilog'   DBCC  CHECKDB(数据库名)  
    /***********************************************************
    ** CREATE BACKUP AND RESTORE DEVICES
    ************************************************************/
    IF @RC=0
       BEGIN

        EXEC sp_addumpdevice 'disk', @DevName_data,@db_path

    exec sp_addumpdevice 'disk', @DevName_log,@log_path
        select @rc=@@error
    IF @RC<>0
    begin
    EXEC SP_DropDevice @Devname_data
    exec sp_dropdevice @devname_log
    SELECT @RC=-1000
    return @rc
    end
      END

       IF  @kind='backup'  
       BEGIN  
           IF  @bakequip=0  
           BEGIN  
               IF  @baktype=0  
               BEGIN  
                   IF  @bakdb=0  
                   BEGIN    
                       BACKUP  DATABASE  数据库名  TO  DISK=@Devname_data   
                       WITH  INIT  
                   END  
                   IF  @baklog=0  
                   BEGIN              
                       BACKUP  LOG  数据库名  WITH  NO_LOG              
                       BACKUP  LOG  数据库名  TO  DISK=@DevName_log 
                       WITH  INIT,NO_TRUNCATE  
                   END  
               END  
               ELSE  BEGIN  
                   IF  @bakdb=0  
                   BEGIN  
                       BACKUP  DATABASE  数据库名  TO  DISK=@DevName_data
                       WITH  NOINIT  
                   END  
                   IF  @baklog=0  
                   BEGIN  
                       BACKUP  LOG  数据库名  WITH  NO_LOG              
                       BACKUP  LOG  数据库名  TO  DISK=@DevName_log 
                       WITH  NOINIT,NO_TRUNCATE  
                   END  
               END          
           END  
           SELECT  @retmsg='数据库备份成功!'  
       END  
     
       IF  @kind='restore'      
       BEGIN  
           RESTORE  DATABASE  数据库名  FROM  DISK=  @DevName_data WITH  REPLACE  
           SELECT  @retmsg='恢复数据库成功!'  
       END   EXEC SP_DropDevice @Devname_data
    exec sp_dropdevice @devname_log
     
       RETURN  0---测试:
    declare @ varchar(100)
    exec gy_dbbak 0,'aa',0,0,0,'backup',@ output
    select @
    -------------------------------------------------
    备份设备:
    sp_helpdevice
    或use master
    select * from sysdevices
      

  5.   

    to iceflylee(冠甄.net):
       谢谢,没有问题。
       但是如何恢复呢?