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 "成功與否字符串"; } } }