gpt4 book ai didi

c# - 在使用 block 或使用 block 声明中声明 IDisposable 成员的区别?

转载 作者:行者123 更新时间:2023-11-30 13:42:38 24 4
gpt4 key购买 nike

我有以下代码:

    using (SqlCommand command = new SqlCommand())
{

command.CommandType = System.Data.CommandType.StoredProcedure;
command.Connection = new SqlConnection();
command.CommandText = "";

command.Parameters.Add(new SqlParameter("@ExperienceLevel", 3).Direction = System.Data.ParameterDirection.Input);

SqlDataReader dataReader = command.ExecuteReader();
}

声明 SqlConnection 是否有任何功能影响,我目前正在声明它而不是这样?:

using (SqlCommand command = new SqlCommand())
using (SqlConnection connection = new SqlConnection())

谢谢

最佳答案

是的,有区别。处置 SqlCommand 不会自动处置与其关联的 SqlConnection。您可能会以这种方式泄漏连接,并且会干扰 ADO.NET 连接池;如果您在这段代码运行时查看数据库服务器的事件,您会看到新的连接正在打开而不是关闭。

您应该始终使用第二个版本。事实上,SqlConnection 对象是您真正需要 Dispose 的对象。您应该始终尽快处置任何 实现IDisposable 的东西,但未能处置SqlConnection 尤其危险。

关于c# - 在使用 block 或使用 block 声明中声明 IDisposable 成员的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2511492/

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