俺只会备份.
string sz_sql="BACKUP DATABASE [" + DataBaseName + "] TO DISK = '" + this.txtPath.Text.Trim() + this.txtFileName.Text.Trim() + "'";执行这句话就可以了.其他两个好像较难实现.
string sz_sql="BACKUP DATABASE [" + DataBaseName + "] TO DISK = '" + this.txtPath.Text.Trim() + this.txtFileName.Text.Trim() + "'";执行这句话就可以了.其他两个好像较难实现.
一般的备份还原代码不说了
这里需要注意的一个问题,
如果当前的数据库是User的话,
如果你连接语句中的数据库的User的话
还原的时候会出错
因为有用户连接到USer的话不能备份
必须关掉所有的到User的连接
并且你连接到Northwind的上,在对User进行备份
to all: 现在备份实现了,但是还原老是不成功,也不报错...
参见在C#中运用SQLDMO备份和恢复Microsoft SQL Server数据库
http://dev.csdn.net/develop/article/28/28564.shtm
当不使用要恢复的数据库时以上方法可行,但当你使用了数据库时就必须杀死该进程
代码如下: /// <summary>
/// 还原数据库函数
/// </summary>
/// <param name="strDbName">数据库名</param>
/// <param name="strFileName">数据库备份文件的完整路径名</param>
/// <returns></returns>
public bool RestoreDB(string strDbName,string strFileName)
{
//PBar = pgbMain ;
SQLDMO.SQLServer svr = new SQLDMO.SQLServerClass() ;
try
{
//服务器名,数据库用户名,数据库用户名密码
svr.Connect("localhost","sa","hai") ;
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 ;
}
//杀死使用strDbName数据库的进程
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 ;
res.Files = strFileName ; res.Database = strDbName ;
res.ReplaceDatabase = true ;
res.SQLRestore(svr) ;
return true ;
}
catch
{
return false;
}
finally
{
svr.DisConnect() ;
}
}
PS:关于这个问题这里已经有很多帖子问了。建议查找一下再!