/相关代码如下  
  #region   立即备份  
  ///   <summary>  
  ///   立即备份  
  ///   </summary>  
  ///   <param   name="param">数据库连接参数</param>  
  ///   <param   name="backupType">备份类型</param>  
  ///   <param   name="backupPath">备份文件存放目录</param>  
  ///   <returns>执行成功为true,失败为false</returns>  
  public   bool   BackupAtOnce(DBConnectionParams   param,SQLDMO.SQLDMO_BACKUP_TYPE   backupType,string   backupPath)  
  {  
   
  SQLDMO.Backup   oBackup   =   new   SQLDMO.BackupClass();  
  SQLDMO.SQLServer   oSQLServer   =   new   SQLDMO.SQLServerClass();  
  try  
  {  
  oSQLServer.LoginSecure   =   false;  
  oSQLServer.Connect(param.ServerName,param.UserID,param.Password);  
  oBackup.Action   =   backupType;  
  oBackup.Database   =   param.DatabaseName;  
  oBackup.BackupSetName   =   param.DatabaseName;  
  oBackup.Files   =   backupPath   +   @"\"   +   param.DatabaseName   +   "_"   +   DateTime.Now.ToString("yyyyMMdd_HHmmss")   +   ".bak";  
  oBackup.BackupSetDescription   =   "back   up   by   "   +   param.UserID   +   "   at   "   +   DateTime.Now.ToString();  
  oBackup.Initialize   =   true;  
  oBackup.SQLBackup(oSQLServer);  
  return   true;  
  }  
  catch   (Exception   ex)  
  {  
  this.m_ErrorMessage   =   ex.Message;  
  return   false;  
  }  
  finally  
  {  
  oSQLServer.DisConnect();  
  }  
  }  
  #endregion  
   
  //问题是当oBackup.Files的值含有空格时,比如为“C:\Program   Files”,执行备份时就会出现错误,我在前后加了单引号也没有用,如何解决呢,谢谢~~~~~~~~~~~~~~~~~~ 

解决方案 »

  1.   

    刚刚试了下,在查询分析器里执行:
    backup database Testdb to disk='D:\Program Files\1.bak'
    成功了,楼主换个没有空格的路径,看看能成功吗?
      

  2.   

    把从界面传进去后,动态生成的SQL语句调试出来,直接在查询分析器中执行试试。
      

  3.   

    我是用的 SQLDMO 组件来实现数据库备份的,他的好处可以用进度条来显示备份程度,在方法上就和一楼的不一样
      

  4.   

    那看看到执行SQL备份时的SQL语句,打出来看是什么样的
      

  5.   

    完整的方法粘出来了, 备份路径中没有空格的时候成功,有空格的 时候出错,    oBackup.Filse = selfName;//文件路径  当oBackup.Filse 的值有空格的时候它当作多个文件路径处理,例如  oBackup.Filse ="C:\Inetpub\abc.bak D:\Inetpub\aaa.bak  E:\Inetpub\bbb.bak"
      是它会在三个地方进行备份,会出现三个备份文件,当然路径不存在的时候会出错,所以当备份路径有空格的时候,它解析为多个文件路径,大多数情况是不存在的,如  oBackup.Filse="C:\Program Files\ACD Systems\aaa.bak" ,它解析成 C:\Program ,Files\ACD 和Systems\aaa.bak 三个备份路径 进行备份,三个路径又不存在,所以会出错,现在还不知道如何解决,希望指点 谢了 
            //数据库备份     需要在窗体中放Label,ProgrssBar控件用来显示提示信息和进度条,还有OpenFileDialog,和SaveFileDialog控件  
            public void BackupDB(string strDbName,string FileName)
            {
               
                //
                //进度条可见
                //
                this.pBarBackup.Visible = true;            string selfName = FileName ;
                            //◆数据备份:  
                SQLDMO.Backup oBackup = new SQLDMO.BackupClass();
                SQLDMO.SQLServer oSQLServer = new SQLDMO.SQLServerClass();
                oBackup.Action = 0;
                
                SQLDMO.BackupSink_PercentCompleteEventHandler pceh = new SQLDMO.BackupSink_PercentCompleteEventHandler(Step);            oBackup.PercentComplete += pceh;            try
                {
                    oSQLServer.LoginSecure = false;
                    oSQLServer.Connect(".", "sa", "sql");
                    oBackup.Action = SQLDMO.SQLDMO_BACKUP_TYPE.SQLDMOBackup_Database;
                    oBackup.Database = strDbName;//数据库名  
                    oBackup.Files = selfName;//文件路径                               oBackup.Initialize = true;
                            oBackup.SQLBackup(oSQLServer);
                   
                }
                catch (System.Exception ex)
                {
                    MessageBox.Show("数据库备份失败!请不要选择备份到桌面!\n\n" + ex.ToString());
                }
                finally
                {
                    oSQLServer.DisConnect();
                }        
                this.pBarBackup.Visible = false;
                        
                       }  
       
      

  6.   

    把路径用中括号括起来,如:
    [C:\Program Files\Microsoft SQL Server\MSSQL\BACKUP\test_now.bak]