還原sql server 資料庫

來源:互聯網
上載者:User

  在這裡我通過在程式中把sql server資料庫安裝到客戶的機器上去:在還原資料前先檢查是否有該資料庫,如果有,可以刪除,也可以殺掉該資料庫相關進程。然後再執行還原作業。

Code
public class DatabaseOper
    {
        public DataOperateBase _Oper;//資料庫操作類對象

        public DatabaseOper()
        {
            _Oper = new SqlDataOperate();
            //WebConfig 為定義類
            _Oper.ConnectionString = WebConfig.getMasterConn();//初始化串連
        }
/// <summary>
        /// 備份/恢複
        /// </summary>
        /// <param name="Type">操作類型,1為備份,2為恢複</param>
        /// <param name="FilePath">路徑,如D:\Bak\Bak.bak</param>
        /// <returns></returns>
        protected bool DatabaseBak(int Type, string FilePath)
        {
            bool ReturnData = false;
            string dbName;
            string sqlText = string.Empty;
            
            
            SqlConnection con = new SqlConnection();
            con.ConnectionString = WebConfig.getConnStr();
            dbName = con.Database;
            if (Type == 1)
            {
                sqlText = "backup database "+ dbName +" to disk ='" + FilePath + "' with init";
            }
            else if (Type == 2)
            {                
                if (ExistsDB(dbName))
                {
                    killProc(dbName);
                }                
                sqlText = "restore database "+dbName+" from disk = '" + FilePath + "'";              

            }
            try
            {
                _Oper.ExecSql(sqlText);
                ReturnData = true;
            }
            catch(SqlException sqlEx) {
                throw (sqlEx);
            }
            return ReturnData;

        }

    }
 /// <summary>
        /// 判斷資料庫是否存在
        /// </summary>
        /// <param name="dbName">資料庫名稱</param>
        /// <returns></returns>
        private bool ExistsDB(string dbName)
        {
            bool exist = false;
            string sqlText = "if not exists(select * from master..sysdatabases where name='" + dbName + "') select getdate() else select null";
            DataTable dt;
           
            _Oper.ConnectionString = WebConfig.getMasterConn();            
            _Oper.ExecSql(sqlText, out dt);            
            if (dt.Rows[0][0]== Convert.DBNull)
            {
                exist = true;
            }
            return exist;
        }
  /// <summary>
        /// 殺掉資料庫進程
        /// </summary>
        /// <param name="dbName">要殺掉進程的資料庫名</param>
        private void killProc(string dbName)
        {
            _Oper.AddParameter("@dbname", dbName);

            try
            {
                _Oper.ExecProc("killspid");//預存程序很多地方都有,到網上找
            }
            catch (SqlException ex)
            {
                throw new Exception(ex.Message);
            }          
        }

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.