Details about specific commands to close SQLConnection class

Dear experts,

I need a little help for a question connected with Net3.5 SQLConnection class. When I finish usages of SQLDataReader and SQLConnection I know that I should release the recourses, my question is for detail command I should use.

I have 2 SQLDataReaders and 1 SQLConnection – now I use a code like this
readerCamp.Dispose(); reader.Dispose(); conn.Dispose();

The right questions I have are:
1.      Do I really need to close SQLDataReaders, or just conn.Dispose is enogh because it will close on himself all relative connection /SQLDataReaders which used it/
2.      The command conn.Dispose(); is equal to conn=null; - true or not?
3.      Long time I use code like:
if (conn.State != ConnectionState.Closed) conn.Close();
conn.Dispose();

is that necessary? If the result is same  prefer use just conn.Dispose();
dvplayltdAsked:
Who is Participating?

Improve company productivity with a Business Account.Sign Up

x
 
Guy Hengel [angelIII / a3]Connect With a Mentor Billing EngineerCommented:
2.      The command conn.Dispose(); is equal to conn=null; - true or not?
=> it's not "equal" in all cases. if there are other variables pointing to the same object, Dispose will dispose the object; while conn = null would just remove this (local) reference to the object.
if conn is the only (respectively last) reference to the object, it will result indeed in the same effect.

3.      Long time I use code like:
if (conn.State != ConnectionState.Closed) conn.Close();
conn.Dispose();

I prefer to explicitly close the connection to make sure the "server" side of the connection get's a proper disconnection. with dispose this might not be the case.
0
 
Guy Hengel [angelIII / a3]Billing EngineerCommented:
closing the connection will NOT close any data reader or dataset.

apart from that, you may want to use the USING syntax:
using ( SqlConnection cnn = new SqlConnection("connection string") )
{
   cnn.Open();
   using ( SqlCommand cmd = new SqlCommand("select ... ", cnn))
   {
      using (SqlDataReader dr = cmd.ExecuteReader())
      {

      }
   }
   cnn.Close();
}

Open in new window


the "using" will run a dispose automatically at it's end.
of course, you shall put some try{} catch {} handlers inside the different brackets, but that is another part of the programming
0
 
dvplayltdAuthor Commented:
I use using on all places where this is practical - but in most place it isn't.

Till now you answer only to my first question - i should close the reader object too, not just its connection. What about other two questions ?
0
Free Tool: Site Down Detector

Helpful to verify reports of your own downtime, or to double check a downed website you are trying to access.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

 
dvplayltdAuthor Commented:
10x. I'm starting programming before 13 years with VB6 and C, so I understand the difference between conn=null and conn.Dispose() as you kindly explain me.

So I'll use  conn.Close(); and then conn.Dispose(), only will not chek this if (conn.State != ConnectionState.Closed)  , i think even the connection is not Open Close() will not produce error, right?
0
 
Guy Hengel [angelIII / a3]Billing EngineerCommented:
>ConnectionState.Closed)  , i think even the connection is not Open Close() will not produce error, right?

if connection is closed, connection.Close() will raise an error.
0
 
dvplayltdAuthor Commented:
Thanks for your last note, i fix my code with global Search and Replace. It show - 55 copies replaced ...

 I say it is not practical to use Using clause as I should have 2-3 levels of nasted code in 4-6 screen pages ... it will make worst reading of the code.
bye and have a nice day!
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.