关于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后,连接还是打开的,是不是故意这么设计,还是什么原因

侃侃尔雅
浏览 594回答 4
4回答

烙印99

因为是外部传入的SqlConnection,他不确定你是否需要这个连接继续开着,所以没关闭,设计使然 你要他自动关闭,应该传一个string作为连接字符串进去,这样的话他会自己开个conn,然后标记一个似乎叫mustClose的变量为true,到时候就会关了

幕布斯7119047

SqlConnection 不要用全局或静态或单例模式 否则会出现不同进程进下OpenCLose混乱

慕码人2483693

TerryLee正解。 如果你想在使用ExecuteNonQuery方法之后自动关闭Connection,看下下面的: 你看下ExecuteNonQuery好像有一个参数重载,它能够关闭与之相关联的Connection对象。(我快俩月没接触过C#了,记得是可以的)。

翻过高山走不出你

你看外面调用的部分,调用完这个方法后,会有一个关闭连接的操作。
打开App,查看更多内容
随时随地看视频慕课网APP