using System;
using System.Data;
using System.Data.SqlClient;
namespace bachupsqlserver
{
/// <summary>
/// 備份與還原sql server 2000資料庫,在asp.net中文正式版和sql server 2000系統上通過
/// </summary>
public class BackupData
{
private SqlConnection conn;
public BackupData()
{
//
// TODO: 在此處添加建構函式邏輯
//
string sql="data source=localhost;initial catalog=master;password=;persist security info=True;user id=sa;workstation id=TOPS03496;packet size=4096";//注意預設資料庫不要和恢複的資料庫同名
init(sql);
}
/// <summary>
/// 備份資料庫
/// </summary>
/// <param name="databasename">要備份的資料來源名稱</param>
/// <param name="backuptodatabase">備份到的資料庫檔案名稱及路徑</param>
/// <returns></returns>
public bool BackUpDataBase(string databasename,string backuptodatabase)
{
string procname;
string name=databasename+DateTime.Now.Year.ToString()+DateTime.Now.Month.ToString()+DateTime.Now.Date.Day.ToString()+DateTime.Now.Minute.ToString();
string sql;
conn.Open(); //開啟資料庫連接
//刪除邏輯備份裝置,但不會刪掉備份的資料庫檔案
procname="sp_dropdevice";
SqlCommand sqlcmd1=new SqlCommand(procname,conn);
sqlcmd1.CommandType =CommandType.StoredProcedure;
SqlParameter sqlpar=new SqlParameter();
sqlpar=sqlcmd1.Parameters.Add("@logicalname",SqlDbType.VarChar,20);
sqlpar.Direction =ParameterDirection.Input;
sqlpar.Value =databasename;
try //如果邏輯裝置不存在,略去錯誤
{
sqlcmd1.ExecuteNonQuery();
}
catch
{
}
//建立邏輯備份裝置
procname="sp_addumpdevice";
SqlCommand sqlcmd2=new SqlCommand(procname,conn);
sqlcmd2.CommandType =CommandType.StoredProcedure;
sqlpar=sqlcmd2.Parameters.Add("@devtype",SqlDbType.VarChar,20);
sqlpar.Direction =ParameterDirection.Input;
sqlpar.Value ="disk";
sqlpar=sqlcmd2.Parameters.Add("@logicalname",SqlDbType.VarChar,20);//邏輯裝置名
sqlpar.Direction =ParameterDirection.Input;
sqlpar.Value =databasename;
sqlpar=sqlcmd2.Parameters.Add("@physicalname",SqlDbType.NVarChar,260);//物理裝置名稱
sqlpar.Direction =ParameterDirection.Input;
sqlpar.Value =backuptodatabase+name+".bak";
try
{
int i=sqlcmd2.ExecuteNonQuery();
}
catch(Exception err)
{
string str=err.Message;
}
//備份資料庫到指定的資料庫檔案(完全備份)
sql="BACKUP DATABASE "+databasename +" TO "+databasename +" WITH INIT";
SqlCommand sqlcmd3=new SqlCommand(sql,conn);
sqlcmd3.CommandType =CommandType.Text;
try
{
sqlcmd3.ExecuteNonQuery();
}
catch(Exception err)
{
string str=err.Message ;
conn.Close();
return false;
}
conn.Close();//關閉資料庫連接
return true;
}
/// <summary>
/// 還原指定的資料庫檔案
/// </summary>
/// <param name="databasename">要還原的資料庫</param>
/// <param name="databasefile">Database Backup檔案及路徑</param>
/// <returns></returns>
public bool RestoreDataBase(string databasename,string databasefile )
{
//還原指定的資料庫檔案
string sql="RESTORE DATABASE "+databasename +" from DISK = '"+databasefile +"' ";
SqlCommand sqlcmd=new SqlCommand(sql,conn);
sqlcmd.CommandType =CommandType.Text;
conn.Open();
try
{
sqlcmd.ExecuteNonQuery();
}
catch(Exception err)
{
string str=err.Message ;
conn.Close();
return false;
}
conn.Close();//關閉資料庫連接
return true;
}
/// <summary>
/// 初始化資料庫的串連
/// </summary>
/// <param name="strconn"></param>
private void init(string strconn)
{
conn=new SqlConnection(strconn);
}
}
}