问题提出快一周了,还是没有好的结果,其他朋友也是这样吗?散尽所有分告别CSDN!请大家帮忙再看一下:
http://community.csdn.net/Expert/topic/4255/4255204.xml?temp=.115597

解决方案 »

  1.   

    看了,你这个问题最好到SQL SERVER版问,这个问题的关键还是和SQL SERVER有关啊
      

  2.   

    不能指望csdn告诉你方方面面,大家只能提供思路
      

  3.   

    没用过,好复杂啊,去sqlserver问问
      

  4.   

    去SQL版问问, 邹建可能知道.
      

  5.   

    在C#中运用SQLDMO备份和恢复Microsoft SQL Server数据库    SQLDMO(SQL Distributed Management Objects,SQL分布式管理对象)封装了Microsoft SQL Server数据库中的对象。SQLDMO是Microsoft SQL Server中企业管理器所使用的应用程序接口,所以它可以执行很多功能,其中当然也包括对数据库的备份和恢复。    SQLDMO由Microsoft SQL Server自带的SQLDMO.dll提供,由于SQLDMO.dll是一个COM对象,所以大家在用之前必须在.NET项目中添加对它的引用。    下面是用C#语言书写的用于Microsoft SQL Server数据库备份和恢复的类:using System;
    namespace DbService
    {
     /// <summary>
     /// DbOper类,主要应用SQLDMO实现对Microsoft SQL Server数据库的备份和恢复
     /// </summary>
     public sealed class DbOper
     {
      /// <summary>
      /// DbOper类的构造函数
      /// </summary>
      private DbOper()
      {
      }
      /// <summary>
      /// 数据库备份
      /// </summary>
      public static void DbBackup()
      {
       SQLDMO.Backup oBackup = new SQLDMO.BackupClass();
       SQLDMO.SQLServer oSQLServer = new SQLDMO.SQLServerClass();
       try
       {
        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;
       }
       finally
       {
        oSQLServer.DisConnect();
       }
      }
      /// <summary>
      /// 数据库恢复
      /// </summary>
      public static void DbRestore()
      {
       SQLDMO.Restore oRestore = new SQLDMO.RestoreClass();
       SQLDMO.SQLServer oSQLServer = new SQLDMO.SQLServerClass();
       try
       {
        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;
       }
       finally
       {
        oSQLServer.DisConnect();
       }
      }
     }
    }    这段代码虽然很短,但是却很实用,希望能够对大家有所帮助。
      

  6.   

    using System;
    using SQLDMO;
    using System.Drawing;
    using System.Collections;
    using System.ComponentModel;
    using System.Windows.Forms;
    using System.Data;namespace bakServe040907
    {

    /// <summary>
    /// 数据库备份类说明
    /// </summary>
    public class bakServer
    {
    string ServerName;   //数据服务器名称
    string UserName;     //用户名称
    string Password;     //用户密码
    string message;      //消息提示 
    ProgressBar PBar;    //状态条控件 public bakServer()
    {

    } /// <summary>
    /// 取得数据库服务器列表
    /// </summary>
    /// <returns>数据库服务器列表</returns>
    public ArrayList GetServerList() 

    ArrayList alServers = new ArrayList() ; 
    SQLDMO.Application sqlApp = new SQLDMO.ApplicationClass() ; 
    try 

    SQLDMO.NameList serverList = sqlApp.ListAvailableSQLServers() ; 
    for(int i = 1;i<= serverList.Count;i++) 

    alServers.Add(serverList.Item(i)) ; 


    catch(Exception e) 

    // throw(new Exception("取数据库服务器列表出错:"+e.Message)) ; 
    message = "取数据库服务器列表出错:" +e.Message; } 
    finally 

    sqlApp.Quit() ; 

    return alServers ; 

    /// <summary>
    /// 错误消息处理
    /// </summary>
    /// <returns>消息信息</returns>
    public string Msg()
    {
    return message;
    } /// <summary>
    /// 取得指定数据库列表
    /// </summary>
    /// <param name="strServerName">服务器名称</param>
    /// <param name="strUserName">用户名称</param>
    /// <param name="strPwd">用户密码</param>
    /// <returns>数据库列表</returns>
    public ArrayList GetDbList(string strServerName,string strUserName,string strPwd) 

    ServerName = strServerName ; 
    UserName = strUserName ; 
    Password = strPwd ; 
    ArrayList alDbs = new ArrayList() ; 
    SQLDMO.Application sqlApp = new SQLDMO.ApplicationClass() ; 
    SQLDMO.SQLServer svr = new SQLDMO.SQLServerClass() ; 
    try 

    svr.Connect(ServerName,UserName,Password) ; 
    foreach(SQLDMO.Database db in svr.Databases) 

    if(db.Name!=null) 
    alDbs.Add(db.Name) ; 


    catch(Exception err) 

    // throw(new Exception("连接数据库出错:"+e.Message)) ; 
    message = "连接数据库出错:" +err.Message;

    finally 

    svr.DisConnect() ; 
    sqlApp.Quit() ; 

    return alDbs ; 

    //数据库的备份和实时进度显示代码: 
    /// <summary>
    /// 数据库的备份和实时进度显示
    /// </summary>
    /// <param name="strDbName">数据库名称</param>
    /// <param name="strFileName">备份文件名</param>
    /// <param name="pgbMain">状态条控件名称</param>
    /// <param name="strServerName">服务器名称</param>
    /// <param name="strUserName">用户名称</param>
    /// <param name="strPwd">密码</param>
    /// <returns>备份成功返回true ,否则返回false</returns>
    public bool BackUPDB(string strDbName,string strFileName, ProgressBar pgbMain,string strServerName,string strUserName,string strPwd) 

    ServerName = strServerName ; 
    UserName = strUserName ; 
    Password = strPwd ;  PBar = pgbMain; 
    SQLDMO.SQLServer svr = new SQLDMO.SQLServerClass() ; 
    try 

    svr.Connect(ServerName,UserName,Password) ; 
    SQLDMO.Backup bak = new SQLDMO.BackupClass(); 
    bak.Action = 0 ; 
    bak.Initialize = true ; 
    SQLDMO.BackupSink_PercentCompleteEventHandler pceh = new SQLDMO.BackupSink_PercentCompleteEventHandler(Step); 
    bak.PercentComplete += pceh;  bak.Files = strFileName; 
    bak.Database = strDbName; 
    bak.SQLBackup(svr); 
    return true ; 

    catch(Exception err) 

    // throw(new Exception("备份数据库失败"+err.Message)) ; 
    message = "备份数据库失败:" +err.Message;
                    return false ; 

    finally 

    svr.DisConnect() ; 


    /// <summary>
    /// 显示进度条的当前进度
    /// </summary>
    /// <param name="message"></param>
    /// <param name="percent"></param>
    private void Step(string message,int percent) 

    PBar.Value = percent ; 

    // 其中,这两个语句实现了进度的实时显示: 
    // SQLDMO.BackupSink_PercentCompleteEventHandler pceh = new SQLDMO.BackupSink_PercentCompleteEventHandler(Step); 
    // bak.PercentComplete += pceh; 
    // Step就是上面private void Step(string message,int percent) 的方法名称,它用来显示进度条的当前进度。  /// <summary>
    /// 数据库的恢复和杀死进程
    /// </summary>
    /// <param name="strDbName">数据库名称</param>
    /// <param name="strFileName">备份文件名</param>
    /// <param name="pgbMain">状态条控件名称</param>
    /// <param name="strServerName">服务器名称</param>
    /// <param name="strUserName">用户名称</param>
    /// <param name="strPwd">密码</param>
    /// <returns>恢复成功返回true ,否则返回false</returns>
    public bool RestoreDB(string strDbName,string strFileName, ProgressBar pgbMain,string strServerName,string strUserName,string strPwd ) 

    PBar = pgbMain ; 
    SQLDMO.SQLServer svr = new SQLDMO.SQLServerClass() ; 
    try 

    ServerName = strServerName ; 
    UserName = strUserName ; 
    Password = strPwd ;  svr.Connect(ServerName,UserName,Password) ; 
    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 ; 
    }  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 ; 
    SQLDMO.RestoreSink_PercentCompleteEventHandler pceh = new SQLDMO.RestoreSink_PercentCompleteEventHandler(Step); 
    res.PercentComplete += pceh; 
    res.Files = strFileName ;  res.Database = strDbName ; 
    res.ReplaceDatabase = true ; 
    res.SQLRestore(svr) ; 
    return true ; 

    catch(Exception err) 

    // throw(new Exception("恢复数据库失败,请关闭所有和该数据库连接的程序!"+err.Message)) ; 
    message = "恢复数据库失败,请关闭所有和该数据库连接的程序!" +err.Message;
    return false;

    finally 

    svr.DisConnect() ; 


    }
    }
      

  7.   

    private void button2_Click(object sender, System.EventArgs e)
    {
    SQLDMO.Restore oRestore = new SQLDMO.RestoreClass();
    SQLDMO.SQLServer oSQLServer = new SQLDMO.SQLServerClass();
    try
    {
    oSQLServer.LoginSecure = false;
    oSQLServer.Connect("localhost", "sa", "888");
    oRestore.Action = SQLDMO.SQLDMO_RESTORE_TYPE.SQLDMORestore_Database;
    oRestore.Database = "AspxCnWeb";
    oRestore.Files = @"c:\AspxCnWeb.bak";
    oRestore.FileNumber = 1;
    oRestore.ReplaceDatabase = false;
    oRestore.SQLRestore(oSQLServer);
    }
    catch
    {
    throw;
    }
    finally
    {
    oSQLServer.DisConnect();
    }
    }
    这样写可以实现差异备份的我试过了。
      

  8.   

    oRestore.ReplaceDatabase = false;将这个设置为false就可以了!
      

  9.   

    我觉的写这么多太复杂了,以前测试过
    我是这样弄的:
    找出dos下备份等命令
    利用c#的process执行命令
    好象就行了
      

  10.   

    如果我没有说错的话
    在系统的管理工具的数据源 (ODBC)里面就能实现上面的朋友所提出的问题
      

  11.   

    TO:wang2034(HOH) 
    能具体讲一下吗?