数据库远程备份与还原
1、Web.config
<connectionStrings>
<add name="BeiFenConnectionString" connectionString="Data Source=192.168.1.201;Initial Catalog=SchoolDB;User ID=huang;Password=123456;"/>
<add name="HuanYuanConnectionStringRestore" connectionString="Data Source=192.168.1.201;Initial Catalog=master;User ID=huang;Password=123456;"/>
</connectionStrings>
<appSettings>
<!--数据库备份文件存放地址-->
<add key="DBBack" value="E:\database\SchoolDB.bak" />
</appSettings>
2、aspx
<asp:Button ID="Button1" runat="server" Text="备份" OnClick="Button1_Click" />
<asp:Button ID="Button2" runat="server" Text="还原" OnClick="Button2_Click" />
3、aspx.cs
//数据库备份
protected void Button1_Click(object sender, EventArgs e)
{
string con_str = ConfigurationManager.ConnectionStrings["BeiFenConnectionString"].ToString();
SqlConnection conn = new SqlConnection(con_str);
SqlCommand cmdBK = new SqlCommand();
cmdBK.CommandType = CommandType.Text;
cmdBK.Connection = conn;
cmdBK.CommandText = @"backup database SchoolDB to disk='E:\Backup\SchoolDB" + ".bak'" + " with init";
try
{
conn.Open();
cmdBK.ExecuteNonQuery();
System.Web.HttpContext.Current.Response.Write("<Script>alert('数据库备份或更新备份成功!');</Script>");
}
catch (Exception)
{
System.Web.HttpContext.Current.Response.Write("<Script>alert('抱歉,服务器连接失败!或者要备份的数据库不存在于服务器中,请先尝试新建或还原!');</Script>");
}
finally
{
conn.Close();
}
}
//还原数据库
protected void Button2_Click(object sender, EventArgs e)
{
string con_str = ConfigurationManager.ConnectionStrings["HuanYuanConnectionStringRestore"].ToString();
SqlConnection conn = new SqlConnection(con_str);
try
{
conn.Open();
SqlCommand cmdRT = new SqlCommand();
cmdRT.CommandType = CommandType.Text;
cmdRT.Connection = conn;
cmdRT.CommandText = "select * from sys.databases where name='SchoolDB'";
object isHave = cmdRT.ExecuteScalar();
if (isHave == null)//不存在
{
cmdRT.CommandText = @"restore database SchoolDB from disk= 'E:\Backup\SchoolTest20120808" + ".bak'";
cmdRT.ExecuteNonQuery();
System.Web.HttpContext.Current.Response.Write("<Script>alert('数据库还原成功!');</Script>");
}
else
{
System.Web.HttpContext.Current.Response.Write("<Script>alert('此数据库已存在!');</Script>");
}
}
catch (Exception)
{
System.Web.HttpContext.Current.Response.Write("<Script>alert('抱歉,服务器连接失败!或者要还原的数据库备份不存在于服务器中,请先尝试备份;或者数据库目前运转正常而不必还原!');</Script>");
}
finally
{
conn.Close();
}
----------------------------------------------------------------------------------------------
还原数据库方案二------------【直接覆盖同名数据库】
protected void Button2_Click(object sender, EventArgs e)
{
string con_str = ConfigurationManager.ConnectionStrings["HuanYuanConnectionStringRestore"].ToString();
SqlConnection conn = new SqlConnection(con_str);
try
{
conn.Open();
//杀死所有正在使用要还原数据的数据库进程
SqlCommand cmd = new SqlCommand("SELECT spid FROM sysprocesses ,sysdatabases WHERE sysprocesses.dbid=sysdatabases.dbid AND sysdatabases.Name='aaa'", conn);
SqlDataReader dr;
dr = cmd.ExecuteReader();
ArrayList list = new ArrayList();
while (dr.Read())
{
list.Add(dr.GetInt16(0));
}
dr.Close();
for (int k = 0; k < list.Count; k++)
{
cmd = new SqlCommand(string.Format("KILL {0}", list[k]), conn);
cmd.ExecuteNonQuery();
}
SqlCommand cmdRT = new SqlCommand();
cmdRT.CommandType = CommandType.Text;
cmdRT.Connection = conn;
cmdRT.CommandText = @"restore database SchoolDB from disk= 'E:\Backup\SchoolTest20120808.bak' with replace ";//若存在 则直接覆盖
cmdRT.ExecuteNonQuery();
System.Web.HttpContext.Current.Response.Write("<Script>alert('数据库还原成功!');</Script>");
}
catch (Exception)
{
System.Web.HttpContext.Current.Response.Write("<Script>alert('抱歉,服务器连接失败!或者要还原的数据库备份不存在于服务器中,请先尝试备份;或者数据库目前运转正常而不必还原!');</Script>");
}
finally
{
conn.Close();
}
}