c# sqlserver備份還原(轉)


WinForm c# 備份 還原 數據庫
 其實是個非常簡單的問題,一個Form,一個Button,一個OpenFileDialog,一個SaveFileDialog.下面給出備份與還原類

using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using System.IO;
using System.Collections;
using System.Windows.Forms;
namespace 我的備份與還原

{
    class 備份與還原數據庫
    {
        static string connectionString = "server=.;database=master;uid=sa;pwd=";
        SqlConnection conn = new SqlConnection(connectionString);
        /// <summary>
        /// 備份指定的數據庫文件
        /// </summary>
        /// <param name="databasename">要還原的數據庫</param>
        /// <returns></returns>
        public bool BackUpDataBase( string databasefile)
        {
            if (!File.Exists(databasefile))
            {

            }
            //還原的數據庫MyDataBase
            string sql = "BACKUP DATABASE " + "MyDataBase" + " TO DISK = '" + databasefile + ".bak' ";
            conn.Open();
            SqlCommand comm = new SqlCommand(sql, conn);
            comm.CommandType = CommandType.Text;
            try
            {
                comm.ExecuteNonQuery();
            }
            catch (Exception err)
            {
                string str = err.Message;
                conn.Close();

                return false;
            }

            conn.Close();//關閉數據庫連接
            return true;
        }

//以下是還原數據庫,稍微麻煩些,要關閉所有與當前數據庫相連的連接------------------------------------

//--------------------------------------------------------------------------------------------------------------------------
        public string RestoreDatabase(string backfile)
        {
            ///殺死原來所有的數據庫連接進程
            SqlConnection conn = new SqlConnection();
            conn.ConnectionString = "Data Source=.;Initial Catalog=master;User ID=sa;pwd =";
            conn.Open();
            string sql = "SELECT spid FROM sysprocesses ,sysdatabases WHERE sysprocesses.dbid=sysdatabases.dbid AND sysdatabases.Name='" + 
                          "MyDataBase"+ "'";
            SqlCommand cmd1 = new SqlCommand(sql, conn);
            SqlDataReader dr;
            ArrayList list = new ArrayList();
            try
            {
                dr = cmd1.ExecuteReader();
                while (dr.Read())
                {
                    list.Add(dr.GetInt16(0));
                }
                dr.Close();
            }
            catch (SqlException eee)
            {
                MessageBox.Show(eee.ToString());
            }
            finally
            {
                conn.Close();
            }
            //MessageBox.Show(list.Count.ToString());
            for (int i = 0; i < list.Count; i++)
            {
                conn.Open();
                cmd1 = new SqlCommand(string.Format("KILL {0}", list[i].ToString()), conn);
                cmd1.ExecuteNonQuery();
                conn.Close();
                MessageBox.Show("系統已經清除的數據庫線程: " + list[i].ToString() + "\r\n正在還原數據庫!");
            }
            //這里一定要是master數據庫,而不能是要還原的數據庫,因為這樣便變成了有其它進程
            //占用了數據庫。
            string constr = @"Data Source=.;Initial Catalog=master;User ID=sa;pwd =";
            string database = MyDataBase;
            string path = backfile;
            string BACKUP = String.Format("RESTORE DATABASE {0} FROM DISK = '{1}'", database, path);
            SqlConnection con = new SqlConnection(constr);
            SqlCommand cmd = new SqlCommand(BACKUP, con);
            con.Open();
            try
            {
                cmd.ExecuteNonQuery();
                MessageBox.Show("還原成功,點擊退出系統!");
                Application.Exit();
            }
            catch (SqlException ee)
            {
                //throw(ee);

                //MessageBox.Show("還原失敗");

                MessageBox.Show(ee.ToString());

            }
            finally
            {
                con.Close();
            }
            return "成功與否字符串";
        }
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM