我用了网上介绍的那个用Interop.SQLDMO.dll来备份还原的技术,备份是不会出错,但是还原要求有排它访问权,在没有用SqlConnection连接数据库之前,是可以还原的,不会出错,但是用OPEN方法连接过数据库后,就无法还原了,就是出个什么“数据库正在使用,什么排它访问权”之类的东西。后来我又用了Close()和Dispose()对SqlConnection进行关闭连接,再去备份,仍然提示这个错误,请问怎样才能彻底的断绝与数据库的连接呢?
调试欢乐多
那么用C#程序怎么停止服务管理器?
public void Restore(string path)
{
try
{
if(!File.Exists(path))
{
throw new Exception("非法的路径名");
}
else
{
string sqlText6="USE master IF EXISTS (SELECT name FROM sysobjects WHERE name = 'killspid' AND type = 'P') DROP PROCEDURE killspid";
string sqlText="CREATE PROCEDURE killspid @dbname varchar(20) as begin declare @sql nvarchar(500),@temp varchar(1000) declare @spid int set @sql='declare getspid cursor for";
sqlText+=" select spid from master..sysprocesses where dbid=db_id('''+@dbname+''')' exec (@sql) open getspid fetch next from getspid into @spid while @@fetch_status <> -1 ";
sqlText+=" begin set @temp='kill '+rtrim(@spid) exec(@temp) fetch next from getspid into @spid end close getspid deallocate getspid end ";
string sqlText2=" execute killspid 'KMTTCMS'";
string sqlText3="alter database KMTTCMS set RESTRICTED_USER with rollback immediate";
string sqlText4="restore database KMTTCMS from disk='"+path+"'";
string sqlText5="alter database KMTTCMS set MULTI_USER with rollback immediate";
_dbo.SqlDb.ExecuteNonQuery(sqlText6);
_dbo.SqlDb.ExecuteNonQuery(sqlText);
_dbo.SqlDb.ExecuteNonQuery(sqlText2);
_dbo.SqlDb.ExecuteNonQuery(sqlText3);
_dbo.SqlDb.ExecuteNonQuery(sqlText4);
_dbo.SqlDb.ExecuteNonQuery(sqlText5);
Response.Write( "<script language=javascript>alert('成功恢复数据!');</script>" ) ;
if(File.Exists(path))
{
File.Delete(path);
}
Response.Write("<script>window.close();</script>");
}
}
catch(Exception ex)
{
Session["Ex"]=ex.Message;
Response.Redirect("error.aspx");
}
finally
{
_dbo.SqlDb.CloseInnerConnection();
}
}