我在一些生成代码分析警告的遗留代码中看到了这一点:
Database db = DatabaseFactory.CreateDatabase(strDBCon);
DbCommand dbCommand = db.GetSqlStringCommand(sb.ToString());
using (IDataReader dataReader = db.ExecuteReader(dbCommand))
{
while (dataReader.Read())
{
}
dataReader.Close(); // <-- this is redundant as close is covered by using's implicit dispose
}
dbCommand.Connection.Close();
dbCommand.Dispose();
db = null;
我在这里读到过,除了处理 dbCommand 之外,还必须关闭 dbCommand.Connection 属性。我原以为 dbCommand 会处理任何子一次性对象,在这种情况下是 Connection。如果不是这种情况,为什么?