现在SQL数据库是一台机子,WEB服务器又是另一台机子,我现在想把备份的文件就放在WEB服务器上相对应的WEB应用程序的文件夹里,这该怎么做??
SQLDMO备份输入的FileName是指数据库服务器上的文件路径,如何设置路径让SQLDMO备份到WEB服务器呢??
谢谢各们高手了!!

解决方案 »

  1.   

    /// <summary>
       /// 数据传输
       /// </summary>
       /// <param name="SrcDatabase"></param>
       /// <param name="ServerName"></param>
       /// <param name="DBUserName"></param>
       /// <param name="DBPassword"></param>
       /// <param name="IsIntegrated"></param>
       /// <param name="DestDatabase"></param>
     private void TransferDatabaseToServer(string SrcDatabase,string ServerName,string DBUserName,string DBPassword,bool IsIntegrated,string DestDatabase)
     {
         SQLDMO.SQLServer2 oServer = new SQLDMO.SQLServer2Class(); 
         SQLDMO.Database2 oDatabase; 
         SQLDMO.Transfer2 oTransfer = new SQLDMO.Transfer2(); 
         oTransfer.IncludeDependencies = false; 
         oServer.LoginSecure = false; 
         oServer.Connect(ServerName,DBUserName,DBPassword); 
         oDatabase = (SQLDMO.Database2)oServer.Databases.Item(SrcDatabase,""); 
         oTransfer.DestDatabase = DestDatabase;
         oTransfer.CopyAllTables = true; 
         oTransfer.CopyAllObjects = true;
         oTransfer.CopyAllDefaults = false; 
         oTransfer.CopyAllRules = true; 
         oTransfer.CopyAllStoredProcedures = true; 
         oTransfer.CopyAllTriggers = true; 
         oTransfer.CopyAllViews = true; 
         oTransfer.CopySchema = true; 
         oTransfer.CopyData = SQLDMO.SQLDMO_COPYDATA_TYPE.SQLDMOCopyData_Replace; 
         oTransfer.DestTranslateChar = true; 
         oTransfer.DropDestObjectsFirst = true; 
         oTransfer.IncludeDB = false; //是否在目标数据库不存在的情况下创建数据库 
         oTransfer.IncludeGroups = false; 
         oTransfer.IncludeUsers = false; 
         oTransfer.IncludeLogins = false; 
         oTransfer.IncludeDependencies = false; 
         oTransfer.DestUseTrustedConnection = false;
         oTransfer.DestLogin = DBUserName; 
         oTransfer.DestPassword = DBPassword; 
         oDatabase.Transfer(oTransfer);
         oServer.DisConnect();     
         oServer = null;
         System.Runtime.InteropServices.Marshal.ReleaseComObject(oTransfer);
         System.Runtime.InteropServices.Marshal.ReleaseComObject(oDatabase);
         //System.Runtime.InteropServices.Marshal.ReleaseComObject(oServer);
         System.GC.Collect();
       
     }
      

  2.   

    to: yiran700(归思难收) 
    你是说手动??可以说得详细一点吗?
      

  3.   

    http://www.netbei.com/Article/aspx/aspx3/200409/2696.html
      

  4.   

    我用job通过调用xp_cmdshell copy到另一台机器
    也可以用windows自带的任务
      

  5.   

    转:
    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类,主要实现对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;
    }
    }
    }
    }
      

  6.   


    参见在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() ; 


    你就可以通过用户设置的时间来备份数据库了,可以用定时器实现