这是给对象赋值的代码 con.ConnectionString = strConnectionString;
cmd.Connection = con;
cmd.CommandType = cmdType;
cmd.CommandText = cmdText;
if (cmdParms != null)
{
foreach (SqlParameter parm in cmdParms)
cmd.Parameters.Add(parm);
}
这是执行ExecuteNonQuery()的代码 using (SqlConnection con = new SqlConnection())
{
SqlCommand cmd = new SqlCommand();
PreCmd(con, cmd, cmdType, cmdText, cmdParms);
int iReturn = -1; try
{
con.Open();
iReturn = cmd.ExecuteNonQuery();
}
catch(Exception ee)
{
throw ee;
}
finally
{
con.Close();
} return iReturn;
}
现在让我很郁闷的是执行完数据库操作之后用SQL Management Studio查看数据库,总是会留有活动连接。请问怎样才能彻底断开活动连接。
cmd.Connection = con;
cmd.CommandType = cmdType;
cmd.CommandText = cmdText;
if (cmdParms != null)
{
foreach (SqlParameter parm in cmdParms)
cmd.Parameters.Add(parm);
}
这是执行ExecuteNonQuery()的代码 using (SqlConnection con = new SqlConnection())
{
SqlCommand cmd = new SqlCommand();
PreCmd(con, cmd, cmdType, cmdText, cmdParms);
int iReturn = -1; try
{
con.Open();
iReturn = cmd.ExecuteNonQuery();
}
catch(Exception ee)
{
throw ee;
}
finally
{
con.Close();
} return iReturn;
}
现在让我很郁闷的是执行完数据库操作之后用SQL Management Studio查看数据库,总是会留有活动连接。请问怎样才能彻底断开活动连接。
{
con.Close()
throw ee;
}
finally
{
if(con.State == ConnectionState.Open)
con.Close();
}
如果连接池值 Pooling 设置为 true 或 yes,则基础连接将返回到连接池。如果 Pooling 设置为 false 或 no,则实际上会关闭到服务器的基础连接
string connectionString="Data Source=MSSQL1;Pooling=false;...";如上pooling=false表示不使用连接池,则Close()时,连接将立即销毁
pooling=true时连接保存至连接池中,有效期内没有使用就销毁,有效期默认30分钟
{
con.Close();
}
很明显下面的是多余的,这叫代码冗余
我以前使用MySql的时候,客户端连接关闭后,但在服务器命令行模式下查看,MySql的连接仍然存在,它是这样处理的:当一个连接请求到来时,检查已存在的连接是否有连接字符串完全一样的,有,则调用存在的连接,一段时间内保存的这个连接没有活动时,再废之,这个默认时间是30分钟,可以自己设置.
也就是说,一个新的连接请求到来时,哪怕客户端Close()了,MySql也会让它存活30分钟,以利再用,这就是数据库服务器的连接池管理