在使用datareader结束时,要保证connection关闭

使用CommandBehavior.CloseConnection来保证在关闭Datareader时,也关闭connection

public static SqlDataReader(.....)

{
            SqlCommand cmd = new SqlCommand();
            SqlConnection conn = new SqlConnection(connectionString);

            // we use a try/catch here because if the method throws an exception we want to
            // close the connection throw code, because no datareader will exist, hence the
            // commandBehaviour.CloseConnection will not work
            try
            {
                PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);
                SqlDataReader sdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
                cmd.Parameters.Clear();
                return sdr;
            }
            catch
            {
                conn.Close();
                throw;
            }

}

在其它地主使用的方法,利用using

using (SqlDataReader sdr = SQLHelper.ExecuteReader(SQLHelper.SQLConnString, CommandType.Text, SQL_Search_ById, adminParms))
            {
                while (sdr.Read())
                {
                    admin = new AdminInfo(sdr.GetInt32(0), sdr.GetString(1), sdr.GetString(2));
                }
            }

或者

SqlDataReader dr = SqlHelper.ExecuteReader(SqlHelper.ConnectionStringProfile, CommandType.Text, sqlSelect.ToString(), parms);
   while(dr.Read()) {
    usernames.Add(dr.GetString(0));
   }

   dr.Close();

//一定要保证,使用之后的状态是关闭的。

原文地址:https://www.cnblogs.com/wenming205/p/1401681.html