使用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();
//一定要保证,使用之后的状态是关闭的。