//可参考下面代码。代码有待修改的地方,使用sql语句进行数据备份,恢复
/// <summary>
/// 备份数据库
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void _ButtonBackUp_Click(object sender, System.EventArgs e)
{
dbConnSet frm = new dbConnSet();//获得数据库sa帐号,密码
frm.ShowDialog();
if(frm.isNormal==false)
return;
this.Cursor = Cursors.WaitCursor;
string _DBSource = "(local)";
string _DBCatalog = "master";
string _DBUser = frm.textBoxDBUser.Text;
string _DBPass = frm.textBoxDBPas.Text;
string m_ConnectionStr = "Provider=SQLOLEDB;Password="+_DBPass+";User ID="+_DBUser+";Initial Catalog="+_DBCatalog+";Data Source="+_DBSource+";Connect Timeout=5;";
OleDbConnection _Conn = new OleDbConnection(m_ConnectionStr);
try
{
_Conn.Open();
NetBee.Controls.FolderBrowserEX.FolderBrowser _SaveFileDialog = new NetBee.Controls.FolderBrowserEX.FolderBrowser(); //保存的文件目录路径
_SaveFileDialog.Description = "请选择备份保存的目录";
if(_SaveFileDialog.ShowDialog()==DialogResult.OK)
{
string _FolderPath = _SaveFileDialog.DirectoryPath;
string[] DBName = {Cs.PubObject.dbName};
for(int i=0;i<DBName.Length;i++)
{
string _DBName = DBName[i];
OleDbCommand _Comm = new OleDbCommand("",_Conn);
//执行数据库备份命令
_Comm.CommandText = "BACKUP DATABASE "+_DBName+" TO DISK = '"+ _SaveFileDialog.DirectoryPath+@"/"+_DBName +".bak'";
_Comm.ExecuteNonQuery();
}
this.Cursor = Cursors.Arrow;
_Conn.Close();
MessageBox.Show("备份数据成功!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information);
}
this.Cursor = Cursors.Arrow;
}
catch(System.Exception error)
{
this.Cursor = Cursors.Arrow;
MessageBox.Show("异常:"+error.Message,"提示",MessageBoxButtons.OK,MessageBoxIcon.Error);
}
this.Cursor = Cursors.Arrow;
}
#endregion
#region 恢复数据库
/// <summary>
/// 恢复数据库
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void _ButtonRestory_Click(object sender, System.EventArgs e)
{
dbConnSet frm = new dbConnSet();
frm.ShowDialog();
if(frm.isNormal==false)
return;
if(MessageBox.Show("该操作将数据覆盖!!/n/n如果选择[是],将原来的数据覆盖/n/n如果选择[否],将退出安装","提示",MessageBoxButtons.YesNo,MessageBoxIcon.Question)==DialogResult.No)
return;
if(MessageBox.Show("请在此确认,该操作不能恢复!!/n/n如果选择[是],将原来的数据覆盖/n/n如果选择[否],将退出安装","提示",MessageBoxButtons.YesNo,MessageBoxIcon.Warning)==DialogResult.No)
return;
this.Cursor = Cursors.WaitCursor;
string _DBSource = "(local)";
string _DBCatalog = "master";
string _DBUser = frm.textBoxDBUser.Text;
string _DBPass = frm.textBoxDBPas.Text;
string m_ConnectionStr = "Provider=SQLOLEDB;Password="+_DBPass+";User ID="+_DBUser+";Initial Catalog="+_DBCatalog+";Data Source="+_DBSource+";Connect Timeout=5;";
OleDbConnection _Conn = new OleDbConnection(m_ConnectionStr);
try
{
_Conn.Open();
NetBee.Controls.FolderBrowserEX.FolderBrowser _SaveFileDialog = new NetBee.Controls.FolderBrowserEX.FolderBrowser();
_SaveFileDialog.Description = "请要恢复的数据目录";
if(_SaveFileDialog.ShowDialog()==DialogResult.OK)
{
string _FolderPath = _SaveFileDialog.DirectoryPath;
string[] DBName = {Cs.PubObject.dbName};
for(int i=0;i<DBName.Length;i++)
{
string _DBName = DBName[i];
string _BakFilePath = _SaveFileDialog.DirectoryPath+@"/"+DBName[i]+@".bak";
OleDbCommand _Comm = new OleDbCommand("restore filelistonly from disk='"+_FolderPath+@"/"+_DBName+@".bak'",_Conn);//获得原来的逻辑名称以及物理路径
OleDbDataReader _Reader = null;
_Reader = _Comm.ExecuteReader();
string[] _LogName = new string[2];//获得逻辑名称
string[] _PhiPath = new string[2];//获得物理路径
int j = 0;
while(_Reader.Read())
{
_LogName[j] = (string)_Reader.GetValue(0);
_PhiPath[j] = (string)_Reader.GetValue(1);
j = j+1;
}
_Reader.Close();
//执行数据库恢复脚本
_Comm = new OleDbCommand("",_Conn);
_Comm.CommandText ="RESTORE DATABASE [" + _DBName + "] FROM DISK = '" + _BakFilePath + "' With Move '"+ _LogName[0] +
"' TO '" +_PhiPath[0]+ "', Move '" + _LogName[1] + "' TO '" + _PhiPath[1]+ "'";
_Comm.ExecuteNonQuery();
}
this.Cursor = Cursors.Arrow;
MessageBox.Show("数据恢复成功!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information);
_Conn.Close();
}
this.Cursor = Cursors.Arrow;
}
catch(System.Exception error)
{
this.Cursor = Cursors.Arrow;
MessageBox.Show("异常:"+error.Message,"错误",MessageBoxButtons.OK,MessageBoxIcon.Error);
}
}
#endregion
怎样实现数据库的备份与恢复
最新推荐文章于 2023-02-14 11:20:15 发布