Office中国论坛/Access中国论坛

标题: 我用ACCESS开发的前台,SQL的后台,前台关掉后SQL进程中还连接中,请问如何关掉前... [打印本页]

作者: 真主    时间: 2016-1-15 16:10
标题: 我用ACCESS开发的前台,SQL的后台,前台关掉后SQL进程中还连接中,请问如何关掉前...
我用ACCESS开发的前台,SQL的后台,前台关掉后SQL进程中还连接中,请问如何关掉前台的ACCESS后,后台SQL进程自动结束?

作者: 小小白菜    时间: 2016-1-15 16:13
一般在语句执行先完加上rs.close应该就断开了与后台的连接吧
作者: 风中漫步    时间: 2016-1-15 16:52
cn.close用过了吗?
作者: wu8313    时间: 2016-1-16 15:08
本帖最后由 wu8313 于 2016-1-16 15:29 编辑

使用如下脚本在SQL后台建立 存储过程,然后在 ACCESS退出时,调用该存储过程。我测试了,可行,你试试看。


把脚本中 @dbname 变量 替换成你数据库的名称。
------------------------------------------------------------
USE [master]
GO

/****** Object:  StoredProcedure [dbo].[P_killconnection]    Script Date: 01/16/2016 13:28:17 ******/
IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[P_killconnection]') AND type in (N'P', N'PC'))
DROP PROCEDURE [dbo].[P_killconnection]
GO

USE [master]
GO

/****** Object:  StoredProcedure [dbo].[P_killconnection]    Script Date: 01/16/2016 13:28:17 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO



/*--调用

use master

declare @y int,@z nvarchar(2000)
exec P_killconnection @y output,@z output

select @y as 删除与数据库的连接是否成功,@z as 删除连接返回的提示



*/

create procedure [dbo].[P_killconnection]



    @is_killconnection int output ,                --根据该参数判断 删除连接是否成功
    @is_killconnection_msg nvarchar(2000) output   --用该参数  截获 删除连接返回的消息

AS  





Set Nocount On
BEGIN


        BEGIN TRY
                    
                    BEGIN TRANSACTION
                                begin  -->>方法一
                                --use master
                                        declare @spid int ;
                                        declare @ddlstring nvarchar(max);
                                        declare @dbname varchar(200);
                                        set @dbname='fly_xc';
                                        declare tmpcur cursor
                                        for select distinct spid as spid from sys.sysprocesses
                                        where dbid=db_id(@dbname) ;
                                        OPEN tmpcur;
                                        fetch tmpcur into @spid ;
                                        while (@@FETCH_STATUS=0)
                                        begin
                                        set @ddlstring=N'Kill '+CONVERT( nvarchar,@spid) ;
                                        execute sp_executesql @ddlstring ;--这里要使用动态脚本,否则将会 提示:在事务中不能使用 kill 命令
                                        fetch tmpcur into @spid ;
                                        end ;
                                        close tmpcur ;
                                        deallocate tmpcur ;
                                end
       
       
                       
                        IF @@error=0 --如果没有 系统级别 报错的话
                                  begin
                                         COMMIT TRANSACTION   
                                         set @is_killconnection=1 --删除连接 成功             
                                         set @is_killconnection_msg='删除与数据库 '+@dbname+' 的连接:成功'
                                            
                                  end
                        ELSE          --如果有 系统级别 报错的话
                                  begin
                                         ROLLBACK TRANSACTION
                                         set @is_killconnection=-1 --删除连接 失败             
                                         set @is_killconnection_msg='删除与数据库 '+@dbname+' 的连接:失败'
                                          
                                  end         

            
        END TRY
       
       
       
        BEGIN CATCH
               
                        ROLLBACK TRANSACTION               
                        SELECT
                        ERROR_NUMBER() AS ErrorNumber,
                        ERROR_MESSAGE() AS ErrorMessage;
                
                        set @is_killconnection=-1 --删除连接 失败             
                        set @is_killconnection_msg='删除与数据库 '+@dbname+' 的连接:失败'

             
        END CATCH;

END



GO




------------------------------------------------------------
作者: 真主    时间: 2016-1-16 16:13
wu8313 发表于 2016-1-16 15:08
使用如下脚本在SQL后台建立 存储过程,然后在 ACCESS退出时,调用该存储过程。我测试了,可行,你试试看。
...

谢谢,我先试试




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3