1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > c#+mysql备份还原数据库_C#实现对数据库的备份还原(完全) – meimao5211

c#+mysql备份还原数据库_C#实现对数据库的备份还原(完全) – meimao5211

时间:2020-10-05 16:41:07

相关推荐

c#+mysql备份还原数据库_C#实现对数据库的备份还原(完全) – meimao5211

( 用SQL语句实现对数据库备份还原操作

备份SqlServer数据库:

backup database 数据库名 to disk (备份文件存放路径+文件名).bak

还原SqlServer数据库:

string path = this.FileUpload1.PostedFile.FileName; //获得备份路径及数据库名称

use master restore database 数据库名 from disk=’" + path + "’"; )

using System;

using System.Collections.Generic;

using ponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

using System.Collections;

using System.Data.Sql;

using System.IO;

namespace 数据库备份

{

public partial class Form1 : Form

{

//需要添加一个引用C:\Program Files\Microsoft SQL Server\80\Tools\Binn下的SQLDMO.DLL;

//SQL默认安装下是在以上路径

//备份的文件放在C:\Program Files\Microsoft SQL Server\MSSQL\BACKUP下

string ServerName = "";

string UserName = "sa";//暂时锁定,可以根据需要自己设置

string Password = "sa";

public Form1()

{

InitializeComponent();

}

//获取服务器列表

public ArrayList GetServerList()

{

ArrayList alServers = new ArrayList();

SQLDMO.Application sqlApp = new SQLDMO.ApplicationClass();

try

{

SQLDMO.NameList serverList = sqlApp.ListAvailableSQLServers();

for (int i = 1; i <= serverList.Count; i++)

{

alServers.Add(serverList.Item(i));

//comboBox1.Items.Add(serverList.Item(i));

listBox1.Items.Add(serverList.Item(i));

}

}

catch (Exception e)

{

throw (new Exception("取数据库服务器列表出错:" + e.Message));

}

finally

{

sqlApp.Quit();

}

return alServers;

}

//获取数据库列表

public ArrayList GetDbList(string strServerName, string strUserName, string strPwd)

{

string ServerName = strServerName;

string UserName = strUserName;

string Password = strPwd;

ArrayList alDbs = new ArrayList();

SQLDMO.Application sqlApp = new SQLDMO.ApplicationClass();

SQLDMO.SQLServer svr = new SQLDMO.SQLServerClass();

try

{

svr.Connect(ServerName, UserName, Password);

foreach (SQLDMO.Database db in svr.Databases)

{

if (db.Name != null)

alDbs.Add(db.Name);

listBox2.Items.Add(db.Name);

}

}

catch (Exception e)

{

MessageBox.Show("连接数据库出错:" + e.Message);

}

finally

{

svr.DisConnect();

sqlApp.Quit();

}

return alDbs;

}

//备份数据

public bool BackUPDB(string strDbName, string strFileName, ProgressBar pgbMain)

{

ProgressBar PBar = pgbMain;

SQLDMO.SQLServer svr = new SQLDMO.SQLServerClass();

try

{

svr.Connect(ServerName, UserName, Password);

SQLDMO.Backup bak = new SQLDMO.BackupClass();

bak.Action = 0;

bak.Initialize = true;

SQLDMO.BackupSink_PercentCompleteEventHandler pceh = new SQLDMO.BackupSink_PercentCompleteEventHandler(Step);

bak.PercentComplete += pceh;

bak.Files = strFileName;//这里可以写成路径+文件名形式,自己写!

bak.Database = strDbName;

bak.SQLBackup(svr);

return true;

}

catch (Exception err)

{

throw (new Exception("备份数据库失败" + err.Message));

}

finally

{

svr.DisConnect();

}

}

//进度条

private void Step(string message, int percent)

{

PBar.Visible = true;

PBar.Value = percent;

}

//还原数据

public bool RestoreDB(string strDbName, string strFileName, ProgressBar pgbMain)

{

ProgressBar PBar = pgbMain;

SQLDMO.SQLServer svr = new SQLDMO.SQLServerClass();

try

{

svr.Connect(ServerName, UserName, Password);

SQLDMO.QueryResults qr = svr.EnumProcesses(-1);

int iColPIDNum = -1;

int iColDbName = -1;

for (int i = 1; i <= qr.Columns; i++)

{

string strName = qr.get_ColumnName(i);

if (strName.ToUpper().Trim() == "SPID")

{

iColPIDNum = i;

}

else if (strName.ToUpper().Trim() == "DBNAME")

{

iColDbName = i;

}

if (iColPIDNum != -1 && iColDbName != -1)

break;

}

for (int i = 1; i <= qr.Rows; i++)

{

int lPID = qr.GetColumnLong(i, iColPIDNum);

string strDBName = qr.GetColumnString(i, iColDbName);

if (strDBName.ToUpper() == strDbName.ToUpper())

svr.KillProcess(lPID);

}

SQLDMO.Restore res = new SQLDMO.RestoreClass();

res.Action = 0;

SQLDMO.RestoreSink_PercentCompleteEventHandler pceh = new SQLDMO.RestoreSink_PercentCompleteEventHandler(Step);

res.PercentComplete += pceh;

res.Files = strFileName;//可以写成路径+文件名

res.Database = strDbName;

res.ReplaceDatabase = true;

res.SQLRestore(svr);

return true;

}

catch (Exception err)

{

throw (new Exception("恢复数据库失败,请关闭所有和该数据库连接的程序!" + err.Message));

}

finally

{

svr.DisConnect();

}

}

private void Form1_Load(object sender, EventArgs e)

{

GetServerList();

string ServerName = "(local)";//这里根据需要自己可以设置成动态的

GetDbList(ServerName, UserName, Password);

}

//根据选择的服务器,列出数据库

private void listBox1_SelectedIndexChanged(object sender, EventArgs e)

{ //这里可以动态设置服务器名,角色名,密码

//string ServerName = listBox1.SelectedItem.ToString();

//GetDbList(ServerName, UserName, Password);

}

private void SelectPath_Click(object sender, EventArgs e)

{

//选择保存路径

//if (folderBrowserDialog1.ShowDialog(this) == DialogResult.OK)

//{

// string path = folderBrowserDialog1.SelectedPath + "\\";

// txtPath.Text = path;

//}

//else

//{

// folderBrowserDialog1.Dispose();

//}

}

//备份按钮

private void btnSave_Click(object sender, EventArgs e)

{

string strDbName = "db_bookmanage";

txtSaveName.Text = DateTime.Now.ToString("yyyyMMddhhmmss");

string strFileName = txtSaveName.Text.ToString().Trim();

if (BackUPDB(strDbName, strFileName, PBar))

{

PBar.Visible = false;

MessageBox.Show("备份完成!");

}

}

//查看历史备份按钮

private void button2_Click(object sender, EventArgs e)

{

listBox3.Items.Clear();

string[] files = Directory.GetFiles(@"C:\Program Files\Microsoft SQL Server\MSSQL\BACKUP");

foreach (string file in files)

listBox3.Items.Add(file.Substring(file.LastIndexOf("\\") + 1, file.Length – file.LastIndexOf("\\") – 1));

}

//还原数据按钮

private void button1_Click(object sender, EventArgs e)

{

PBar.Visible = true;

string strDbName = "db_bookmanage";

//txtSaveName.Text = DateTime.Now.ToString("yyyyMMddhhmmss");

if (txtReName.Text == "")

{

MessageBox.Show("请选择一个要还原的文件!");

return;

}

string strFileName = txtReName.Text.ToString().Trim();

if (RestoreDB(strDbName, strFileName, PBar))

{

PBar.Visible = false;

MessageBox.Show("还原完成!");

}

}

//历史备份文件名

private void listBox3_SelectedIndexChanged(object sender, EventArgs e)

{

txtReName.Text = listBox3.SelectedItem.ToString();

}

}

}

欢迎加入我爱机器学习QQ14群:336582044

微信扫一扫,关注我爱机器学习公众号

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。