I have the code below:
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();
}
Is there any functional impact in declaring the SqlConnection where I currently am declaring it as opposed to like so?:
using (SqlCommand command = new SqlCommand())
using (SqlConnection connection = new SqlConnection())
Thanks
Yes, there’s a difference. Disposing the
SqlCommanddoes not automatically dispose theSqlConnectionit’s associated with. You can leak connections that way, and it will interfere with ADO.NET connection pooling; if you take a look at the database server’s activity while this code runs, you’ll see new connections being opened and not closed.You should always be using the second version. In fact, the
SqlConnectionobject is the one that you really need toDispose. You should always dispose anything that implementsIDisposableas soon as possible, but failing to dispose aSqlConnectionis particularly dangerous.