Closing SqlConnection and SqlCommand c#
In my DAL I write queries like this:
using(SQLConnection conn = "connection string here")
{
SQLCommand cmd = new ("sql query", conn);
// execute it blah blah
}
Now it just occurred to me that I am not explicitly closing the SQLCommand object. Now I know the 'using' block will take care of the SQLConnection object, but will this also take care of the SQLCommand object? If not than I have a serious problem. I would have to put in the 'using' on the SQLCommand on thousands and thousands of lines of code or do a cmd.Close() on hundreds of methods. Please tell me 开发者_运维百科that if putting in the using or closing the command will provide a better memory management of the web app?
The SqlConnection
has no knowledge about the SqlCommand
, so you should close it by itself:
using (SqlConnection conn = new SqlConnection("connection string here"))
using (SqlCommand cmd = new SqlCommand("sql query", conn))
{
// execute it blah blah
}
No, the using
statement will not take care of the command.
You should wrap the commands with using
statements as well, since this will properly call Dispose
on them:
using(SQLConnection conn = 'connection string here')
{
using(SQLCommand cmd = new ('sql query', conn))
{
//execute it blah blah
}
}
It won't handle the SqlCommand
, but the SqlCommand
will eventually be handled by the garbage collector. I tend to do the following:
using (SqlConn conn ... )
using (SqlComm comm ... )
{
conn.Open();
}
Stacking the using statements here will handle both.
精彩评论