<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    qileilove

    blog已經轉移至github,大家請訪問 http://qaseven.github.io/

    用Asp.net還原與恢復sqlserver數(shù)據(jù)庫

    上次做了個項目,涉及到數(shù)據(jù)庫的還原和恢復,到網(wǎng)上找了一下,是利用SQLDMO實現(xiàn)的,只要添加SQLDMO引用就好了,然后利用下邊的類的方法就可以實現(xiàn)了。
      我把原作者的類擴充了一下,可以自動識別web.config里 的數(shù)據(jù)庫連接字符串,可以通過變量設置還原恢復的信息。
      需要注意的時還原,還原的時候問題最大了,有別的用戶使用數(shù)據(jù)庫的時候無法還原,解決辦法就是在MASTER數(shù)據(jù)庫中添加一個存儲過程:
    createprockillspid(@dbnamevarchar(20))
    as
    begin
    declare@sqlnvarchar(500)
    declare@spidint
    set@sql='declaregetspidcursorfor
    selectspidfromsysprocesseswheredbid=db_id('''+@dbname+''')'
    exec(@sql)
    opengetspid
    fetchnextfromgetspidinto@spid
    while@@fetch_status<>-1
    begin
    exec('kill'+@spid)
    fetchnextfromgetspidinto@spid
    end
    closegetspid
    deallocategetspid
    end
    GO
      在還原之前先執(zhí)行這個存儲過程,需要傳遞dbname,就是你的數(shù)據(jù)庫的名字。下邊是類的原代碼:(web.config里的數(shù)據(jù)庫連接字符串是constr)
    using System;
    using System.Configuration;
    using System.Data.SqlClient;
    using System.Data;
    namespace web.base_class
    {
    /// <summary>
    /// DbOper類,主要應用SQLDMO實現(xiàn)對Microsoft SQL Server數(shù)據(jù)庫的備份和恢復
    /// </summary>
    public class DbOper
    {
    private string server;
    private string uid;
    private string pwd;
    private string database;
    private string conn;
    /// <summary>
    /// DbOper類的構造函數(shù)
    /// </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>
    /// 數(shù)據(jù)庫備份
    /// </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 = "數(shù)據(jù)庫備份";
    oBackup.Initialize = true;
    oBackup.SQLBackup(oSQLServer);
    return true;
    }
    catch
    {
    return false;
    throw;
    }
    finally
    {
    oSQLServer.DisConnect();
    }
    }
    /// <summary>
    /// 數(shù)據(jù)庫恢復
    /// </summary>
    public string DbRestore(string url)
    {
    if(exepro()!=true)//執(zhí)行存儲過程
    {
    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 "恢復數(shù)據(jù)庫失敗";
    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();
    }
    }
    }
    }

    posted on 2014-05-08 16:47 順其自然EVO 閱讀(136) 評論(0)  編輯  收藏 所屬分類: 測試學習專欄

    <2014年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    導航

    統(tǒng)計

    常用鏈接

    留言簿(55)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 国产亚洲午夜高清国产拍精品| 亚洲黄色在线观看网站| 亚洲人成电影网站| 无码精品A∨在线观看免费| 亚洲国产成人精品不卡青青草原| 青柠影视在线观看免费| 中文字幕中韩乱码亚洲大片| 一级毛片aaaaaa视频免费看| 亚洲AV无码乱码在线观看性色扶| 国产亚洲精品美女久久久久 | 亚洲成AV人片天堂网无码| 一级做a爰片久久毛片免费陪| 亚洲Av无码乱码在线znlu| 特色特黄a毛片高清免费观看| 久久精品亚洲男人的天堂| 在线免费播放一级毛片| 中文字幕亚洲色图| 国产福利视精品永久免费| 亚洲国产成人99精品激情在线| 国内自产拍自a免费毛片| 免费看内射乌克兰女| 国产精品亚洲аv无码播放| 久别的草原电视剧免费观看| 久久综合亚洲鲁鲁五月天| 成人一a毛片免费视频| 黄网站色视频免费观看45分钟| 亚洲人JIZZ日本人| 国产又黄又爽又猛免费app| 毛片亚洲AV无码精品国产午夜 | 久久久久亚洲AV无码专区体验| 亚洲一区二区三区国产精品无码| 日韩毛片无码永久免费看| 乱人伦中文视频在线观看免费| 国产成A人亚洲精V品无码性色| 永久免费在线观看视频| 国产精品亚洲а∨天堂2021 | 亚洲国产精品综合久久网络| 一级做a爰全过程免费视频| 亚洲国产成人精品无码区二本| 亚洲精品美女久久久久99| 无码中文在线二区免费|