gpt4 book ai didi

c# - DbCommand 和连接 - 为什么不关闭底层连接?

转载 作者:行者123 更新时间:2023-11-30 22:18:09 25 4
gpt4 key购买 nike

我在一些生成代码分析警告的遗留代码中看到了这一点:

  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。如果不是这样,为什么?

最佳答案

在这方面,类型可以选择获得某物的所有权或仅利用某物。在您的情况下,特别是在这种情况下,您所做的只是传入一个您创建的现有实例,并且很可能会再次使用。

如果该类型是显式构造并传入一个类型的实例,您可能希望它获得该实例的所有权,因此将其作为其处置模式的一部分进行管理,但不是 transient 方法调用的情况。

关于c# - DbCommand 和连接 - 为什么不关闭底层连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16316277/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com