获取DataReader
SqlDataReader dr = null;
            SqlConnection con = SQLServerHelper.GetCon();
            try
            {
                con.Open();
                SqlCommand com = new SqlCommand(sql, con);
                dr = com.ExecuteReader(CommandBehavior.CloseConnection);
            }
            catch
            {
                return null;
            }
关闭:dr.Dispose();dr.Close();
为什么通过这样的释放并关闭后,查询master数据库:
EXEC sp_lock; 
select spid,cmd,cpu,physical_io,memusage,
(select top 1 [text] from ::fn_get_sql(sql_handle)) sql_text
from master..sysprocesses order by cpu desc,physical_io desc;该连接状态:EXEC sp_lock 结果:
-----------------------------------------------
54 1 1115151018 0 TAB                                  IS GRANT
55 5 0 0 DB                                  S GRANT
56 5 0 0 DB                                  S GRANT
57 5 0 0 DB                                  S GRANT-----------------------------------------------后面一个sql的结果:
55 AWAITING COMMAND 0 2 2 INSERT INTO [ECMS].[dbo].[CustomerLog]([operatorName],
                                                       [CUSTOMERID],[handletims],[handeltype]) ........53 AWAITING COMMAND 0 1 2 select CHARGEITEMID FROM POLY where chargeItemID=1
56 AWAITING COMMAND 0 0 2 select CHARGEITEMID FROM POLY where chargeItemID=52
57 AWAITING COMMAND 0 0 2 select CHARGEITEMID FROM POLY where chargeItemID=56为什么这个连接的状态仍然为Awaiting Command而并没有释放呢?数据库已经更改远程登录超时时间为20s;如果连续操作的话数据库就会无响应,请问如果立即关闭这个连接???谢谢各位!!!

解决方案 »

  1.   

    SqlDataReader=command.ExecuteReader(CommandBehavior.CloseConnection) 
    把默认使用的数据库连接池关闭,连接被close时,其实是放入了连接池内,下一次打开不会造成性能上的损耗,因为每一个连接,都有一个InnerConnection,存储的是与数据库的物理连接,close方法调用时,启用了连接池,这个内部连接时不会被关闭的。
      

  2.   

    EXEC sp_lock 结果:
    -----------------------------------------------
    54 1 1115151018 0 TAB IS GRANT
    55 5 0 0 DB S GRANT
    56 5 0 0 DB S GRANT
    57 5 0 0 DB S GRANT-----------------------------------------------
    这个锁又怎么解释呢?