当前位置:编程学习 > C#/ASP.NET >>

asp.net c#SQLDMO使用问题

/// </summary>
        public void  DbRestore(string path)
        {
            if (exepro() != true)
            {
                
            }
            else
            {
                SQLDMO.Restore oRestore = new SQLDMO.RestoreClass();
                SQLDMO.SQLServer oSQLServer = new SQLDMO.SQLServerClass();
                try
                {
                    oSQLServer.LoginSecure = false;
                    oSQLServer.Connect("lwt", "sa", "12666954");
                    oRestore.Action = SQLDMO.SQLDMO_RESTORE_TYPE.SQLDMORestore_Database;
                    oRestore.Database = "gradstu";//连接数据库名
                    oRestore.Files = path;
                    oRestore.FileNumber = 1;
                    oRestore.ReplaceDatabase = true;//是否覆盖当前数据库
                    oRestore.SQLRestore(oSQLServer);
                    
                }
                catch(Exception errm)
                {
                    
                   
                   throw;
                }
                finally
                {
                    oSQLServer.DisConnect();//释放连接
                }
            }
这个里边的 oRestore.Files = path;
path是我存储备份文件的绝对路径:就比如是c:\input\wwwroot\12346.bak吧
请问这里的路径这样对不对。或者其他地方有什么错误,请高手指点下。我的程序运行会抛出异常
异常信息如下:[Microsoft][ODBC SQL Server Driver][SQL Server]因为数据库正在使用,所以无法获得对数据库的独占访问权。
[Microsoft][ODBC SQL Server Driver][SQL Server]RESTORE DATABASE 正在异常终止。
里边的exepe()方法是调用存储过程杀掉当前库的所有进程。
请高手指点。在线等~ --------------------编程问答-------------------- 路径是对的

因为数据库正在使用
=======
因为有连接存在,所以还原之前,你得调用清掉这些连接,

参考

用ASP.NET还原与恢复SQL Server数据库 http://www.zlku.cn/f/ct8/

--------------------编程问答-------------------- public bool exepro()
       {

           SqlConnection conn1 = new SqlConnection("Data Source=LWT;Initial Catalog=master;User ID=sa;password=12666954");
          SqlCommand cmd = new SqlCommand("killspid",conn1);
          cmd.CommandType = CommandType.StoredProcedure;
          cmd.Parameters.Add("@dbname", "grastu");
           try
           {
               conn1.Open();
               cmd.ExecuteNonQuery();
                return true;
           }
           catch
            {
                return false;
            }
            finally
            {
                conn1.Close();
            }
        }
    } --------------------编程问答-------------------- create proc killspid (@dbname varchar(20)) 
as 
begin 
declare @sql nvarchar(500),@temp varchar(1000)
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 =0
begin 
set @temp='kill '+rtrim(@spid)
exec(@temp)
fetch next from getspid into @spid 
end 
close getspid 
deallocate getspid 
end 

GO
存储过程。 
--------------------编程问答-------------------- 问题还是最上边说的问题,依然存在。 --------------------编程问答-------------------- 你是否将结束目标数据库的连接的程序段放在了紧靠oRestore.SQLRestore(oSQLServer);之前了...

还有就是你确定你已经将活动连接结束掉了,自己可以在master库中的sysprocess表中查看,或者直接开那个库看运行断开程序时是否显示断开了连接^_^GL --------------------编程问答-------------------- SQL Server 2005简装版的都没有这个Master,也没有这个sysprocess表啊!
哥们怎么办啊? --------------------编程问答-------------------- SQL Server 2005简装版的都没有这个Master,也没有这个sysprocess表啊!
哥们怎么办啊?
==============================
网上找个或者问别人要个,附加进去! --------------------编程问答-------------------- 权限
--------------------编程问答-------------------- 没有权限,怎么办呀..

湖南墙体广告www.csxzgg.com
湖南墙体导航www.QiangTiGuangGao.cn
大口段www.dakouduan.com
平江县房产网www.pingjiangxian.com
补充:.NET技术 ,  ASP.NET
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,