做完了一个小项目,没做过数据库备份,请大哥们指点!
解决方案 »
- winform怎么能判断开始时间必须比结束时间要早?
- 如何确定一个IP是否是要联的主机IP呢?
- 麻烦请教个思路!SOS
- mdi打开多个子窗体的时候,怎样判断当前某个窗体是否被用户处于在编辑状态
- 急求:C#中BCD码转成10进制的函数
- XML的问题
- 關於Grove的_NET应用程序
- 未能加载文件或程序集“EnvDTE, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”或它的某一个依赖项。系统找不到指定的文件。
- 请问WinForm如何显示远程的图片?例如http://www.company.com/logo.jpg
- 高分求助.怎样在Datagrid中排序后得到选中行(多行)的行号??
- 第一次的困惑?(能自动获得数据库连接吗)
- 限制登陆时间,防止一个id同时使用!mm在线等,如好使,马上散分!
copyfile()
如果是sqlserver的话用sql语句如下:
backup database 数据库名 disk='备份的文件名'
{
if( ""==strBackPath )
{
MessageBox.Show("请先选择备份路径!");
}
else
{
this.Cursor = Cursors.WaitCursor;if( BackUpDB( Global.MainIni.IniReadValue("DataBase","Server"),
Global.MainIni.IniReadValue("DataBase","UID"),
Encrypt.Decrypt3DES( Global.MainIni.IniReadValue("DataBase","PWD"), Encrypt.strKey ) ,
Global.MainIni.IniReadValue("DataBase","DataBase"),
strBackPath )
)
{
this.Cursor = Cursors.Arrow;
MessageBox.Show("数据备份成功!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information);
this.proBar.Value = 0;
}
this.Cursor = Cursors.Arrow;
}strBackPath = "";
}
private void btnRestoreData_Click(object sender, System.EventArgs e)
{
if(MessageBox.Show("该操作将数据覆盖!!\n\n如果选择[是],将原来的数据覆盖\n\n如果选择[否],将取消恢复","提示",MessageBoxButtons.YesNo,MessageBoxIcon.Warning)==DialogResult.No)
return;
return;
this.Cursor = Cursors.WaitCursor;
if( RestoreData( Global.MainIni.IniReadValue("DataBase","Server"),
Global.MainIni.IniReadValue("DataBase","UID"),
Encrypt.Decrypt3DES( Global.MainIni.IniReadValue("DataBase","PWD"), Encrypt.strKey ) ,
Global.MainIni.IniReadValue("DataBase","DataBase"),
strRestorePath )
)
{
this.Cursor = Cursors.Arrow;
MessageBox.Show("数据恢复成功!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information);
this.proBar.Value = 0;}
}public bool RestoreData( string ServerName, string UserName, string Password,string strDbName,string strFileName )
{
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) ;
} }
catch(Exception err)
{
throw(new Exception("恢复数据库失败,请关闭所有和该数据库连接的程序!"+err.Message)) ;
}
try
{
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() ;
} }
{
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() ;
}
}
你看看对你有没有帮助。
不过楼主要注意了,重复备份时,可能数据库中的数据会重复,而不是覆盖!
可以找个数据库操作下!