我用sqldmo写了一个数据库恢复程序,执行的时候报错:
[Microsoft][ODBC SQL Server Driver][SQL Server]因为数据库正在使用,所以未能获得对数据库的排它访问权。 [Microsoft][ODBC SQL Server Driver][SQL Server]RESTORE DATABASE 操作异常终止。
我的程序是这样写的
SQLDMO.SQLServer SQLServer=new SQLDMO.SQLServerClass();
SQLServer.LoginSecure=false;
SQLServer.Connect(Server,Sqlname,Sqlpassword);SQLDMO.Restore SQLRestore=new SQLDMO.RestoreClass();
SQLRestore.Database=DataBase;
SQLRestore.Files=backpath+"办公系统数据库备份.bak";
SQLRestore.FileNumber=System.Int16.Parse(num.Trim());
SQLRestore.ReplaceDatabase=true;
SQLRestore.SQLRestore(SQLServer);
SQLServer.DisConnect();好像是在恢复前要先锁定数据库,sqldmo如何锁定数据库?
[Microsoft][ODBC SQL Server Driver][SQL Server]因为数据库正在使用,所以未能获得对数据库的排它访问权。 [Microsoft][ODBC SQL Server Driver][SQL Server]RESTORE DATABASE 操作异常终止。
我的程序是这样写的
SQLDMO.SQLServer SQLServer=new SQLDMO.SQLServerClass();
SQLServer.LoginSecure=false;
SQLServer.Connect(Server,Sqlname,Sqlpassword);SQLDMO.Restore SQLRestore=new SQLDMO.RestoreClass();
SQLRestore.Database=DataBase;
SQLRestore.Files=backpath+"办公系统数据库备份.bak";
SQLRestore.FileNumber=System.Int16.Parse(num.Trim());
SQLRestore.ReplaceDatabase=true;
SQLRestore.SQLRestore(SQLServer);
SQLServer.DisConnect();好像是在恢复前要先锁定数据库,sqldmo如何锁定数据库?
declare @spid varchar(20)
declare #spid cursor for
select spid=cast(spid as varchar(20)) from master..sysprocesses where dbid=db_id(@dbname)
open #spid
fetch next from #spid into @spid
while @@fetch_status=0
begin
exec('kill '+@spid)
fetch next from #spid into @spid
end
close #spid
deallocate #spidGO