是否有必要处置 SqlConnection 以及 SqlCommand?
Is it necessary to dispose SqlConnection as well as SqlCommand?
是否需要单独处理 SqlConnection 和 SqlCommand?
我正在对应用程序进行一些维护工作,发现以下代码:
public void CallStoredProc(string storedProcName)
{
using (SqlCommand command = new SqlCommand(storedProcName, CreateConnection()))
{
command.CommandType = CommandType.StoredProcedure;
command.Connection.Open();
// Additional code here.
command.ExecuteNonQuery();
}
}
这是否会在正常情况下以及出现错误时正确清理 SqlConnection?或者我们是否必须将代码更改为:
public void CallStoredProc(string storedProcName)
{
using (SqlConnection connection = CreateConnection())
{
using (SqlCommand command = new SqlCommand(storedProcName, connection))
{
command.CommandType = CommandType.StoredProcedure;
command.Connection.Open();
// Additional code here.
command.ExecuteNonQuery();
}
}
}
是的,您必须单独处理连接。您还可以在 source code 中看到这一点: SqlCommand.Dispose()
不会关闭或处置它使用的连接(顺便说一句,无论如何这都是不好的,因为您无法使用相同的连接执行多个命令)。
是的,有必要在您的代码段执行后释放 sqlconnection 和 sqlcommand 对象。
现在,您可以通过两种方式实现此目的:
- 在 using 语句中编写代码,它将负责处理对象,因为 sqlconnection 和 sqlcommand 实现了负责处理对象的 IDisposable 接口..
- 通过在 sqlconnection 对象上显式调用 .close() 方法。
是否需要单独处理 SqlConnection 和 SqlCommand?
我正在对应用程序进行一些维护工作,发现以下代码:
public void CallStoredProc(string storedProcName)
{
using (SqlCommand command = new SqlCommand(storedProcName, CreateConnection()))
{
command.CommandType = CommandType.StoredProcedure;
command.Connection.Open();
// Additional code here.
command.ExecuteNonQuery();
}
}
这是否会在正常情况下以及出现错误时正确清理 SqlConnection?或者我们是否必须将代码更改为:
public void CallStoredProc(string storedProcName)
{
using (SqlConnection connection = CreateConnection())
{
using (SqlCommand command = new SqlCommand(storedProcName, connection))
{
command.CommandType = CommandType.StoredProcedure;
command.Connection.Open();
// Additional code here.
command.ExecuteNonQuery();
}
}
}
是的,您必须单独处理连接。您还可以在 source code 中看到这一点: SqlCommand.Dispose()
不会关闭或处置它使用的连接(顺便说一句,无论如何这都是不好的,因为您无法使用相同的连接执行多个命令)。
是的,有必要在您的代码段执行后释放 sqlconnection 和 sqlcommand 对象。
现在,您可以通过两种方式实现此目的:
- 在 using 语句中编写代码,它将负责处理对象,因为 sqlconnection 和 sqlcommand 实现了负责处理对象的 IDisposable 接口..
- 通过在 sqlconnection 对象上显式调用 .close() 方法。