zl程序教程

您现在的位置是:首页 >  后端

当前栏目

asp.net备份和恢复数据库的方法示例

2023-06-13 09:15:18 时间

复制代码代码如下:


/**********************************************************************************

 *
 *功能说明:备份和恢复SQLServer数据库
 *作者:刘功勋;
 *版本:V0.1(C#2.0);时间:2007-1-1
 *当使用SQLServer时,请引用COM组件中的,SQLDMO.dll组件
 *当使用Access中,请浏览添加引用以下两个dll
 *         引用C:\ProgramFiles\CommonFiles\System\ado\msadox.dll,该DLL包含ADOX命名空间
 *         引用C:\ProgramFiles\CommonFiles\System\ado\msjro.dll,该DLL包含JRO命名空间
 ********************************************************************************/
usingSystem;
usingSystem.Data;
usingSystem.Configuration;
usingSystem.Web;
usingSystem.Web.Security;
usingSystem.Web.UI;
usingSystem.Web.UI.WebControls;
usingSystem.Web.UI.WebControls.WebParts;
usingSystem.Web.UI.HtmlControls;
usingSystem.IO;
usingADOX;//该命名空间包含创建ACCESS的类(方法)--解决方案==>引用==>添加引用==>游览找到.dll
usingJRO;//该命名空间包含压缩ACCESS的类(方法)

namespaceEC
{
   ///<summary>
   ///数据库恢复和备份
   ///</summary>
   publicclassSqlBackObject
   {
       publicSqlBackObject()
       {
           //
           //TODO:在此处添加构造函数逻辑
           //
       }

       #regionSQL数据库备份
      ///<summary>
       ///SQL数据库备份
      ///</summary>
      ///<paramname="ServerIP">SQL服务器IP或(Localhost)</param>
      ///<paramname="LoginName">数据库登录名</param>
      ///<paramname="LoginPass">数据库登录密码</param>
      ///<paramname="DBName">数据库名</param>
      ///<paramname="BackPath">备份到的路径</param>
       publicstaticvoidSQLBACK(stringServerIP,stringLoginName,stringLoginPass,stringDBName,stringBackPath)
       {
           SQLDMO.BackupoBackup=newSQLDMO.BackupClass();
           SQLDMO.SQLServeroSQLServer=newSQLDMO.SQLServerClass();
           try
           {
               oSQLServer.LoginSecure=false;
               oSQLServer.Connect(ServerIP,LoginName,LoginPass);
               oBackup.Database=DBName;
               oBackup.Files=BackPath;
               oBackup.BackupSetName=DBName;
               oBackup.BackupSetDescription="数据库备份";
               oBackup.Initialize=true;
               oBackup.SQLBackup(oSQLServer);

           }
           catch(Exceptione)
           {
               thrownewException(e.ToString());
           }
           finally
           {
               oSQLServer.DisConnect();
           }
       }
       #endregion

       #regionSQL恢复数据库
       ///<summary>
       ///SQL恢复数据库
       ///</summary>
       ///<paramname="ServerIP">SQL服务器IP或(Localhost)</param>
       ///<paramname="LoginName">数据库登录名</param>
       ///<paramname="LoginPass">数据库登录密码</param>
       ///<paramname="DBName">要还原的数据库名</param>
       ///<paramname="BackPath">数据库备份的路径</param>

       publicstaticvoidSQLDbRestore(stringServerIP,stringLoginName,stringLoginPass,stringDBName,stringBackPath)
       {

           SQLDMO.Restoreorestore=newSQLDMO.RestoreClass();
           SQLDMO.SQLServeroSQLServer=newSQLDMO.SQLServerClass();
           try
           {
               oSQLServer.LoginSecure=false;
               oSQLServer.Connect(ServerIP,LoginName,LoginPass);
               orestore.Action=SQLDMO.SQLDMO_RESTORE_TYPE.SQLDMORestore_Database;
               orestore.Database=DBName;
               orestore.Files=BackPath;
               orestore.FileNumber=1;
               orestore.ReplaceDatabase=true;
               orestore.SQLRestore(oSQLServer);

           }
           catch(Exceptione)
           {
               thrownewException(e.ToString());
           }
           finally
           {
               oSQLServer.DisConnect();
           }
       }


       #endregion

       #region根据指定的文件名称创建Access数据库
       ///<summary>
       ///根据指定的文件名称创建数据
       ///</summary>
       ///<paramname="DBPath">绝对路径+文件名称</param>
       publicstaticvoidCreateAccess(stringDBPath)
       {
           if(File.Exists(DBPath))//检查数据库是否已存在
           {
               thrownewException("目标数据库已存在,无法创建");
           }         
           DBPath="Provider=Microsoft.Jet.OLEDB.4.0;DataSource="+DBPath;
           //创建一个CatalogClass对象实例
           ADOX.CatalogClasscat=newADOX.CatalogClass();
           //使用CatalogClass对象的Create方法创建ACCESS数据库
           cat.Create(DBPath);

       }
       #endregion

       #region压缩Access数据库
       ///<summary>
       ///压缩Access数据库
       ///</summary>
       ///<paramname="DBPath">数据库绝对路径</param>
       publicstaticvoidCompactAccess(stringDBPath)
       {
           if(!File.Exists(DBPath))
           {
               thrownewException("目标数据库不存在,无法压缩");
           }

           //声明临时数据库名称
           stringtemp=DateTime.Now.Year.ToString();
           temp+=DateTime.Now.Month.ToString();
           temp+=DateTime.Now.Day.ToString();
           temp+=DateTime.Now.Hour.ToString();
           temp+=DateTime.Now.Minute.ToString();
           temp+=DateTime.Now.Second.ToString()+".bak";
           temp=DBPath.Substring(0,DBPath.LastIndexOf("\\")+1)+temp;
           //定义临时数据库的连接字符串
           stringtemp2="Provider=Microsoft.Jet.OLEDB.4.0;DataSource="+temp;
           //定义目标数据库的连接字符串
           stringDBPath2="Provider=Microsoft.Jet.OLEDB.4.0;DataSource="+DBPath;
           //创建一个JetEngineClass对象的实例
           JRO.JetEngineClassjt=newJRO.JetEngineClass();
           //使用JetEngineClass对象的CompactDatabase方法压缩修复数据库
           jt.CompactDatabase(DBPath2,temp2);
           //拷贝临时数据库到目标数据库(覆盖)
           File.Copy(temp,DBPath,true);
           //最后删除临时数据库
           File.Delete(temp);
       }
       #endregion

       #region备份Access数据库
       ///<summary>
       ///备份Access数据库
       ///</summary>
       ///<paramname="srcPath">要备份的数据库绝对路径</param>
       ///<paramname="aimPath">备份到的数据库绝对路径</param>
       ///<returns></returns>
       publicstaticvoidBackup(stringsrcPath,stringaimPath)
       {

           if(!File.Exists(srcPath))
           {
               thrownewException("源数据库不存在,无法备份");
           }
           try
           {
               File.Copy(srcPath,aimPath,true);
           }
           catch(IOExceptionixp)
           {
               thrownewException(ixp.ToString());
           }

       }

       #endregion

       #region还原Access数据库
       ///<summary>
       ///还原Access数据库
       ///</summary>
       ///<paramname="bakPath">备份的数据库绝对路径</param>
       ///<paramname="dbPath">要还原的数据库绝对路径</param>
       publicstaticvoidRecoverAccess(stringbakPath,stringdbPath)
       {         
           if(!File.Exists(bakPath))
           {
               thrownewException("备份数据库不存在,无法还原");
           }
           try
           {
               File.Copy(bakPath,dbPath,true);
           }
           catch(IOExceptionixp)
           {
               thrownewException(ixp.ToString());
           }      
       }      
       #endregion
   }
}