private void button1_Click(object sender, EventArgs e)
        {
            string path = "d:\\database\\students.bak";
            string strsql = "backup database students to disk='" + path + "'";
            SqlConnection conn = new SqlConnection("server=.;database=students;integrated security=true");
            SqlCommand cmd = new SqlCommand(strsql,conn);
            conn.Open();
            cmd.ExecuteNonQuery();
            conn.Close();
            MessageBox.Show("备份成功!");
        }        private void button2_Click(object sender, EventArgs e)
        {
//在这里添加关闭数据连接的代码            string path = "d:\\database\\students.bak";
            string strsql = "restore database students from disk='" + path + "'";
            SqlConnection conn = new SqlConnection("server=.;database=aaa;integrated security=true");
            SqlCommand cmd = new SqlCommand(strsql, conn);
            conn.Open();
            cmd.ExecuteNonQuery();
            conn.Close();
            MessageBox.Show("恢复成功!");
        }
老师说还原前要先关闭当前的数据库连接。说要在button2_Click中加几段关闭数据库连接的代码我搜了好久也没有搜到,请大家帮助

解决方案 »

  1.   

    要在button2_Click中加几段关闭数据库连接的代码
    汗。
      

  2.   

    CREATE proc RestoreDb @bkfile nvarchar(1000),@dbname sysname='',@dbpath nvarchar(260)='',@retype nvarchar(10)='DB',@filenumber int=1, @overexist bit=1,@killuser bit=1 
    as declare @sql varchar(8000)  if isnull(@dbname,'')=''select @sql=reverse(@bkfile),@sql=case when charindex('.',@sql)=0 then @sql else substring(@sql,charindex('.',@sql)+1,1000) end ,@sql=case when charindex('\',@sql)=0 then @sql  else left(@sql,charindex('\',@sql)-1) end,@dbname=reverse(@sql) 
    set @sql='restore '+case @retype when 'LOG' then 'log ' else 'database ' end+@dbname+' from disk='''+@bkfile+''''+' with file='+cast(@filenumber as varchar) +case when @overexist=1 and @retype in('DB','DBNOR') then ',replace' else '' end +case @retype when 'DBNOR' then ',NORECOVERY' else ',RECOVERY' end 
    print @sql 
    if @overexist=1 and @killuser=1 
    begin 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 #spid  End  
    exec (@sql) 
      

  3.   

    use  master 
    go 
    create  proc  KillSpByDbName(@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 <>-1  
    begin  
      set @temp='kill  '+rtrim(@spid) 
      exec(@temp) 
    fetch  next  from  getspid  into  @spid  
    end  
    close  getspid  
    deallocate  getspid  
    end  --举例使用,关闭数据库下的所有连接操作 
    Use  master  
    Exec  KillSpByDbName  '数据库名称' 
    关闭数据库,Kill所有连接 另外一个方法就是:自己设计一个连接池 Connection Pool
    关闭整个Pool就OK了
    转自:http://zhidao.baidu.com/question/102688192.html