使用asp.net应用程序保存数据库备份(C#)
问题描述:
我想在asp.net应用程序中备份我的数据库.
当我保存它时,它应该替换为上一个.
I want to take a backup of my database in asp.net application.
When i save it, it should replace with previous one.
How can i do this?
答
Class BackupDbTask.cs
Class BackupDbTask.cs
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using Microsoft.Build.Framework;
using Microsoft.SqlServer.Management.Smo;
using Microsoft.SqlServer.Management.Common;
public class BackupDbTask
{
private string _sqlserverUser;
public string SQLServerUser
{
get { return _sqlserverUser; }
set { _sqlserverUser = value; }
}
private string _sqlserverPassword;
public string SQLServerPassword
{
get { return _sqlserverPassword; }
set { _sqlserverPassword = value; }
}
private string _sqlserverInstanceName;
public string SqlServerInstanceName
{
get { return _sqlserverInstanceName; }
set { _sqlserverInstanceName = value; }
}
private string _sqlserverDBName;
public string SqlServerDBName
{
get { return _sqlserverDBName; }
set { _sqlserverDBName = value; }
}
private string _databaseBackupFolder;
public string DatabaseBackupFolder
{
get { return _databaseBackupFolder; }
set { _databaseBackupFolder = value; }
}
private string _backupFile;
public string BackupFile
{
get { return _backupFile; }
set { _backupFile = value; }
}
#endregion Properties
public void Execute()
{
// Backup Db
try
{
ServerConnection conn = new ServerConnection();
conn.LoginSecure = false;
conn.DatabaseName = this.SqlServerDBName;
conn.ServerInstance = this.SqlServerInstanceName;
conn.Login = this.SQLServerUser;
conn.Password = this.SQLServerPassword;
Server svr = new Server(conn);
Database BuildDB = svr.Databases[this.SqlServerDBName];
string dbbackupfile = this.DatabaseBackupFolder + @"\" + this.SqlServerDBName + ".bak"; ;
Backup backup = new Backup();
backup.Database = this.SqlServerDBName;
backup.MediaName = "FileSystem";
BackupDeviceItem bkpDeviceItem = new BackupDeviceItem();
bkpDeviceItem.DeviceType = DeviceType.File;
bkpDeviceItem.Name = dbbackupfile;
backup.Devices.Add(bkpDeviceItem);
backup.Initialize = true;
backup.SqlBackup(svr);
this.BackupFile = dbbackupfile;
}
catch (Exception ex)
{
}
}
}
RestoreDBTask.cs类
Class RestoreDBTask.cs
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using Microsoft.Build.Framework;
using Microsoft.SqlServer.Management.Smo;
using Microsoft.SqlServer.Management.Common;
public class RestoreDBTask
{
#region Properties
private string _sqlserverUser;
public string SQLServerUser
{
get { return _sqlserverUser; }
set { _sqlserverUser = value; }
}
private string _sqlserverPassword;
public string SQLServerPassword
{
get { return _sqlserverPassword; }
set { _sqlserverPassword = value; }
}
private string _sqlserverInstanceName;
public string SqlServerInstanceName
{
get { return _sqlserverInstanceName; }
set { _sqlserverInstanceName = value; }
}
private string _sqlserverDBName;
public string SqlServerDBName
{
get { return _sqlserverDBName; }
set { _sqlserverDBName = value; }
}
private string _backupFileFolder;
public string BackupFileFolder
{
get { return _backupFileFolder; }
set { _backupFileFolder = value; }
}
private string _backupFile;
public string BackupFile
{
get { return _backupFile; }
set { _backupFile = value; }
}
#endregion Properties
public bool Execute()
{
ServerConnection conn = new ServerConnection();
conn.LoginSecure = false;
conn.DatabaseName = "Master";
conn.ServerInstance = this.SqlServerInstanceName;
conn.Login = this.SQLServerUser;
conn.Password = this.SQLServerPassword;
Server svr = new Server(conn);
Database db = svr.Databases["Master"];
string dbbackupfile = string.Empty;
if (this.BackupFile == string.Empty)
dbbackupfile = this.BackupFileFolder + @"\" + this.SqlServerDBName + ".bak";
else
dbbackupfile = this.BackupFile;
try
{
// Restore Database
Restore restore = new Restore();
restore.Database = this.SqlServerDBName;
restore.RestrictedUser = true;
restore.Action = RestoreActionType.Database;
restore.ReplaceDatabase = true;
restore.Devices.AddDevice(dbbackupfile, DeviceType.File);
svr.KillAllProcesses(this.SqlServerDBName);
restore.Wait();
restore.SqlRestore(svr);
}
catch (Exception ex)
{
"Database restore failed", ex.InnerException.Message)
}
}
}
这是一个简单的代码段,它在列表框中显示数据库列表.
BackupNow()方法备份磁盘中的选定数据库.备份路径在
中指定 web.config中的appsettings部分.
Here is a simple codesnippet which displays a list of databases in a listbox.
The BackupNow() method backups the selected database in the disk. The backup path is specified in
the appsettings section in the web.config.
GetConnection conn = new GetConnection();
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
LoadHeader();
PopulateDatabaseTables();
GetBackupList();
}
}
private void PopulateDatabaseTables()
{
string tableName = string.Empty;
string sql = "select distinct db_name(s_mf.database_id) AS database_name"+
" from sys.master_files s_mf where s_mf.state = 0 ";
using (SqlConnection DBConn = conn.GetDBCon())
{
using (DataTable databases = new DataTable())
{
using (SqlDataAdapter dAd = new SqlDataAdapter(sql, DBConn))
{
dAd.Fill(databases);
}
ListBox1.DataSource = databases;
ListBox1.DataTextField = "database_name";
ListBox1.DataBind();
}
}
}
protected void BackUpNow(object sender, EventArgs e)
{
string tableName = this.ListBox1.SelectedItem.ToString();
string date = DateTime.Now.ToShortDateString();
date = date.Replace("/", "-");
date = date.Replace(" ", ":");
string path = ConfigurationManager.AppSettings.Get("DBBackupPath").ToString();
using ( SqlConnection DBConn = conn.GetDBCon())
{
string query = "backup database @tableName To Disk=''" + path + "\\" + tableName + "[" + date + "]" + ".bak''";
SqlCommand cmd = new SqlCommand(query, DBConn);
cmd.Parameters.Add(new SqlParameter("@tableName", tableName));
cmd.ExecuteNonQuery();
}
GetBackupList();
lblMessage.Text = "Backup for <b>Database</b> successful!";
}
public void GetBackupList()
{
string path = ConfigurationManager.AppSettings.Get("DBBackupPath").ToString();
DirectoryInfo diFiles = new DirectoryInfo(path);
backupList.DataSource = diFiles.GetFiles("*.bak");
backupList.DataBind();
}
这是一个简单的代码段,它在列表框中显示数据库列表.
BackupNow()方法备份磁盘中的选定数据库.备份路径在
中指定 web.config中的appsettings部分.
Here is a simple codesnippet which displays a list of databases in a listbox.
The BackupNow() method backups the selected database in the disk. The backup path is specified in
the appsettings section in the web.config.
GetConnection conn = new GetConnection();
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
LoadHeader();
PopulateDatabaseTables();
GetBackupList();
}
}
private void PopulateDatabaseTables()
{
string tableName = string.Empty;
string sql = "select distinct db_name(s_mf.database_id) AS database_name"+
" from sys.master_files s_mf where s_mf.state = 0 ";
using (SqlConnection DBConn = conn.GetDBCon())
{
using (DataTable databases = new DataTable())
{
using (SqlDataAdapter dAd = new SqlDataAdapter(sql, DBConn))
{
dAd.Fill(databases);
}
ListBox1.DataSource = databases;
ListBox1.DataTextField = "database_name";
ListBox1.DataBind();
}
}
}
protected void BackUpNow(object sender, EventArgs e)
{
string tableName = this.ListBox1.SelectedItem.ToString();
string date = DateTime.Now.ToShortDateString();
date = date.Replace("/", "-");
date = date.Replace(" ", ":");
string path = ConfigurationManager.AppSettings.Get("DBBackupPath").ToString();
using ( SqlConnection DBConn = conn.GetDBCon())
{
string query = "backup database @tableName To Disk=''" + path + "\\" + tableName + "[" + date + "]" + ".bak''";
SqlCommand cmd = new SqlCommand(query, DBConn);
cmd.Parameters.Add(new SqlParameter("@tableName", tableName));
cmd.ExecuteNonQuery();
}
GetBackupList();
lblMessage.Text = "Backup for <b>Database</b> successful!";
}
public void GetBackupList()
{
string path = ConfigurationManager.AppSettings.Get("DBBackupPath").ToString();
DirectoryInfo diFiles = new DirectoryInfo(path);
backupList.DataSource = diFiles.GetFiles("*.bak");
backupList.DataBind();
}