<form id="hz9zz"></form>
  • <form id="hz9zz"></form>

      <nobr id="hz9zz"></nobr>

      <form id="hz9zz"></form>

    1. 明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

      用asp.net還原與恢復sqlserver數據庫

      [摘要]上次做了個項目,涉及到數據庫的還原和恢復,到網上找了一下,是利用SQLDMO實現的,只要添加SQLDMO引用就好了,然后利用下邊的類的方法就可以實現了。我把原作者的類擴充了一下,可以自動識別web.config里 的數據庫連接字符串,可以通過變量設置還原恢復的信息。需要注意的時還原,還原的時候問題...

          上次做了個項目,涉及到數據庫的還原和恢復,到網上找了一下,是利用SQLDMO實現的,只要添加SQLDMO引用就好了,然后利用下邊的類的方法就可以實現了。

      我把原作者的類擴充了一下,可以自動識別web.config里 的數據庫連接字符串,可以通過變量設置還原恢復的信息。

      需要注意的時還原,還原的時候問題最大了,有別的用戶使用數據庫的時候無法還原,解決辦法就是在MASTER數據庫中添加一個存儲過程:


      create proc killspid (@dbname varchar(20))
      as
      begin
      declare @sql nvarchar(500)
      declare @spid int
      set @sql='declare getspid cursor for
      select spid from sysprocesses where dbid=db_id('''+@dbname+''')'
      exec (@sql)
      open getspid
      fetch next from getspid into @spid
      while @@fetch_status<>-1
      begin
      exec('kill '+@spid)
      fetch next from getspid into @spid
      end
      close getspid
      deallocate getspid
      end
      GO


      在還原之前先執行這個存儲過程,需要傳遞dbname,就是你的數據庫的名字。下邊是類的原代碼:(web.config里的數據庫連接字符串是constr)
       

      using System;

      using System.Configuration;

      using System.Data.SqlClient;

      using System.Data;

      namespace web.base_class

      {

           /// <summary>

           /// DbOper類,主要應用SQLDMO實現對Microsoft SQL Server數據庫的備份和恢復

           /// </summary>

           public class DbOper

           {

                private string server;

                private string uid;

                private string pwd;

                private string database;

                private string conn;

               /// <summary>

               /// DbOper類的構造函數

               /// </summary>

               public DbOper()

               {

                    conn=System.Configuration.ConfigurationSettings.AppSettings["constr"].ToString();

                    server=cut(conn,"server=",";");

                    uid=cut(conn,"uid=",";");

                    pwd=cut(conn,"pwd=",";");

                    database=cut(conn,"database=",";");

               }

               public string cut(string str,string bg,string ed)

               {

                    string sub;

                    sub=str.Substring(str.IndexOf(bg)+bg.Length);

                    sub=sub.Substring(0,sub.IndexOf(";"));

                    return sub;

               }

       

               /// <summary>

               /// 數據庫備份

               /// </summary>

               public  bool DbBackup(string url)

               {

                    SQLDMO.Backup oBackup = new SQLDMO.BackupClass();

                    SQLDMO.SQLServer oSQLServer = new SQLDMO.SQLServerClass();

                    try

                    {

                         oSQLServer.LoginSecure = false;

                         oSQLServer.Connect(server,uid, pwd);

                         oBackup.Action = SQLDMO.SQLDMO_BACKUP_TYPE.SQLDMOBackup_Database;

                         oBackup.Database = database;

                         oBackup.Files = url;//"d:\Northwind.bak";

                         oBackup.BackupSetName = database;

                         oBackup.BackupSetDescription = "數據庫備份";

                         oBackup.Initialize = true;

                         oBackup.SQLBackup(oSQLServer);

                         return true;

                    }

                    catch

                    {

                         return false;

                         throw;

                    }

                    finally

                    {

                         oSQLServer.DisConnect();

                    }

               }

       

               /// <summary>

               /// 數據庫恢復

               /// </summary>

               public string DbRestore(string url)

               {

                    if(exepro()!=true)//執行存儲過程

                    {

                         return "操作失敗";

                    }

                    else

                    {

                         SQLDMO.Restore oRestore = new SQLDMO.RestoreClass();

                         SQLDMO.SQLServer oSQLServer = new SQLDMO.SQLServerClass();

                         try

                         {

                              oSQLServer.LoginSecure = false;

                              oSQLServer.Connect(server, uid, pwd);

                              oRestore.Action = SQLDMO.SQLDMO_RESTORE_TYPE.SQLDMORestore_Database;

                              oRestore.Database = database;

                              oRestore.Files = url;//@"d:\Northwind.bak";

                              oRestore.FileNumber = 1;

                              oRestore.ReplaceDatabase = true;

                              oRestore.SQLRestore(oSQLServer);

                             return "ok";

                         }

                         catch(Exception e)

                         {

                             return "恢復數據庫失敗";

                             throw;

                         }

                         finally

                         {

                              oSQLServer.DisConnect();

                         }

                    }

               }

                private bool exepro()

               {

                    SqlConnection conn1 = new SqlConnection("server="+server+";uid="+uid+";pwd="+pwd+";database=master");

                    SqlCommand cmd = new SqlCommand("killspid",conn1);

                    cmd.CommandType = CommandType.StoredProcedure;

                    cmd.Parameters.Add("@dbname","port");

                    try

                    {

                         conn1.Open();

                         cmd.ExecuteNonQuery();

                         return true;

                    }

                    catch(Exception ex)

                    {

                         return false;

                    }

                    finally

                    {

                         conn1.Close();

                    }

       

               }

           }

      }




      日韩精品一区二区三区高清