关于SqlConnection连接,关闭的问题
这是微软petshop 4.0中的两个方法:
public static int ExecuteNonQuery(SqlConnection connection, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters) {
SqlCommand cmd = new SqlCommand();
PrepareCommand(cmd, connection, null, cmdType, cmdText, commandParameters);
int val = cmd.ExecuteNonQuery();
cmd.Parameters.Clear();
return val;
}
private static void PrepareCommand(SqlCommand cmd, SqlConnection conn, SqlTransaction trans, CommandType cmdType, string cmdText, SqlParameter[] cmdParms) {
if (conn.State != ConnectionState.Open)
conn.Open();
cmd.Connection = conn;
cmd.CommandText = cmdText;
if (trans != null)
cmd.Transaction = trans;
cmd.CommandType = cmdType;
if (cmdParms != null) {
foreach (SqlParameter parm in cmdParms)
cmd.Parameters.Add(parm);
}
没有关闭连接,测试了下,我调用ExecuteNonQuery后,连接还是打开的,是不是故意这么设计的,还是什么原因
------解决方案--------------------应该有关闭的地方吧
------解决方案--------------------自己 using了
------解决方案--------------------肯定是自己手动关闭~
也许你要用那个conn还做点别的事,如果PrepareCommand给你关闭了,你不又要打开?
------解决方案--------------------.net里面有内存回收机制的,在petshop里面没有显式调用close,因为内存回收,会自动把没有的空闲的conntion关闭掉,所以不用担心。另外还有数据库连接池这个功能。可以上网找找帮助了解一下。欢迎在广东工作的技术员和美工加入QQ群1884645。
------解决方案--------------------关闭之后别忘了释放缓存
con.Close();
con.Dispose();//释放con的缓存
cmd也要释放
------解决方案--------------------自己写个异常扑获,try下,在里面写关闭。