日期:2014-05-18  浏览次数:20556 次

关于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下,在里面写关闭。