我在Master数据库中建如下存储过程,kill掉数据库的所有联接:
Create Procedure killspid (@dbname varchar(20))
as
begin
declare @sql nvarchar(500)
declare @spid int
set @sql='declare getspid cursor for
select spid from sysprocesses where dbid=db_id('''+@dbname+''')'
exec (@sql)
open getspid
fetch next from getspid into @spid
while @@fetch_status<>-1
begin
exec('kill '+@spid)
fetch next from getspid into @spid
end
close getspid
deallocate getspid
end
GO
然后用adocommand调用这个过程,成功恢复了数据:
DataM.BackADOCommand.CommandText:='Use Master';
DataM.BackADOCommand.Execute;
DataM.BackADOCommand.CommandText:='exec killspid Gl'; //调用存储过程DataM.BackADOCommand.Execute;
DataM.BackADOCommand.CommandText:='restore database Gl from disk=''D:\Program Files\Microsoft SQL Server\MSSQL\BACKUP\gl.back'' with recovery,Replace';
DataM.BackADOCommand.Execute;
DataM.BackADOCommand.CommandText:='Use Gl';
DataM.BackADOCommand.Execute;但是在恢复后我该如何刷新dbgrid显示的数据呢?
我的dbgrid是通过ADOTable连接数据库。
好象调用了上面的存储过程把数据库所有的连接都kill了,所以我把ADOTable再次打开数据集就出错。用什么办法重新连接,刷新dbgrid显示的数据?
Create Procedure killspid (@dbname varchar(20))
as
begin
declare @sql nvarchar(500)
declare @spid int
set @sql='declare getspid cursor for
select spid from sysprocesses where dbid=db_id('''+@dbname+''')'
exec (@sql)
open getspid
fetch next from getspid into @spid
while @@fetch_status<>-1
begin
exec('kill '+@spid)
fetch next from getspid into @spid
end
close getspid
deallocate getspid
end
GO
然后用adocommand调用这个过程,成功恢复了数据:
DataM.BackADOCommand.CommandText:='Use Master';
DataM.BackADOCommand.Execute;
DataM.BackADOCommand.CommandText:='exec killspid Gl'; //调用存储过程DataM.BackADOCommand.Execute;
DataM.BackADOCommand.CommandText:='restore database Gl from disk=''D:\Program Files\Microsoft SQL Server\MSSQL\BACKUP\gl.back'' with recovery,Replace';
DataM.BackADOCommand.Execute;
DataM.BackADOCommand.CommandText:='Use Gl';
DataM.BackADOCommand.Execute;但是在恢复后我该如何刷新dbgrid显示的数据呢?
我的dbgrid是通过ADOTable连接数据库。
好象调用了上面的存储过程把数据库所有的连接都kill了,所以我把ADOTable再次打开数据集就出错。用什么办法重新连接,刷新dbgrid显示的数据?
当你再次打开ADOTable时,SQL Server正在执行删除连接、恢复数据库的操作,所以出错。
解决方法:
拖延一点时间再连接,如出错,再拖延一点时间...
前提:所有的table和query都连着这个adoconnection
把adoconnection的connectionstring重新设置一下,
把adotable连着这个adoconnection就ok了
而我一直设置adotable的connectionstring就是不行