public static void ShowSessionCount(string tag)
{
using (SqlConnection cn = new SqlConnection(cnStrMonitor))
{
cn.Open();
SqlCommand cmd = new SqlCommand(@"
select count(*) as c
from sys.sysprocesses where loginame = 'testCnnUser'",
cn);
SqlDataReader dr = cmd.ExecuteReader();
dr.Read();
Console.WriteLine("[{1}] Session Count={0}", dr["c"], tag);
dr.Close();
cn.Close();
}
}
public static void TestConnPool()
{
using (SqlConnection cn = new SqlConnection(cnStrTester))
{
ShowSessionCount("Before Open");
cn.Open();
ShowSessionCount("After Open");
SqlCommand cmd = new SqlCommand(
"select getdate()", cn);
SqlDataReader dr = cmd.ExecuteReader();
dr.Read();
Console.WriteLine(dr[0]);
//dr.Close();
SqlConnection.ClearPool(cn);
ShowSessionCount("Before Close");
cn.Close();
ShowSessionCount("After Close");
}
ShowSessionCount("After Using");
SqlConnection.ClearAllPools();
ShowSessionCount("After ClearAllPools");
}
用我的工作機Windows 2008 + VS 2008 + SQL 2008進行測試,發現SqlDataReader.Close()不影響Connection的釋放。