SqlServer数据库备份和还原的问题。我有一段还原SqlServer数据库的程序,但只在VisualStudio.net环境中点“在浏览器中查看"好用,在IIS中 还原时要断开对还原数据库所有用户的连接。具体实现到SQL SERVER版看看。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 不能对当前的数据库进行还原。在代码前面加上use master 把oRestore.Database = "yichang";改为 oRestore.Database = "master"; 还有其他数据库链接关闭所有:查询分析器;与本数据库有关的应用程序;停止所有与本数据库有关的windows服务;关闭.NET Server浏览器 把你的VS.net关闭,企业管理器关闭,还有你的查询分析器关闭,然后运行你的程序看看行不行,这样的恢复方式不是很好用的,只要有人lock你的DB数据你就没办法恢复 这个问题,我刚刚也碰到,恢复数据库时,保证被恢复的数据库能够不被使用,结束进程应该使用其他连接保证被恢复的数据库不被使用public bool DbRestore(string restorename,string path) {SQLDMO.Restore oRestore = new SQLDMO.RestoreClass(); SQLDMO.SQLServer oSQLServer = new SQLDMO.SQLServerClass(); try { oSQLServer.LoginSecure = false; oSQLServer.Connect("localhost",username,password); SQLDMO.QueryResults qr = oSQLServer.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() == restorename.ToUpper()) { try { oSQLServer.KillProcess(lPID) ; } catch { 停止进程失败! } } } oRestore.Action = 0; oRestore.Database = restorename; oRestore.Files = path; oRestore.ReplaceDatabase = true; oRestore.SQLRestore(oSQLServer); return true; } catch { return false; } finally { oSQLServer.DisConnect(); } } C# 控制台程序 控制输入字符 在线等 C# 超级线程问题!!! 请问为什么List<string> 的序列号是16进制的? 线程等待的方法,方法里的代码怎么写啊? 关于.net中乱码的问题 那位熟悉视频监控软件开发。价格面议 大文本(textbox/textarea)编辑器,换行保存问题.-----在线等 开两个客户端,然后更新同一条数据,引发违反并发性错误,求解决 当应用程序窗口没被击活时,用快捷键使用程序里的功能,代码如何写啊? 关于程序中调应用程序的问题 关于多线程的问题,请大家帮忙呀! 紧急求助:关于调用一个c++函数,请高手解答!!
应该使用其他连接保证被恢复的数据库不被使用
public bool DbRestore(string restorename,string path)
{
SQLDMO.Restore oRestore = new SQLDMO.RestoreClass();
SQLDMO.SQLServer oSQLServer = new SQLDMO.SQLServerClass();
try
{
oSQLServer.LoginSecure = false;
oSQLServer.Connect("localhost",username,password);
SQLDMO.QueryResults qr = oSQLServer.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() == restorename.ToUpper())
{
try
{
oSQLServer.KillProcess(lPID) ;
}
catch
{
停止进程失败! }
}
} oRestore.Action = 0;
oRestore.Database = restorename;
oRestore.Files = path;
oRestore.ReplaceDatabase = true;
oRestore.SQLRestore(oSQLServer);
return true;
}
catch
{
return false;
}
finally
{
oSQLServer.DisConnect();
}
}