我有以下代码:
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/