Details about specific commands to close SQLConnection class

Posted on 2013-01-10
Last Modified: 2013-01-10
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();

is that necessary? If the result is same  prefer use just conn.Dispose();
Question by:dvplayltd
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 3
  • 3
LVL 143

Expert Comment

by:Guy Hengel [angelIII / a3]
ID: 38762320
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") )
   using ( SqlCommand cmd = new SqlCommand("select ... ", cnn))
      using (SqlDataReader dr = cmd.ExecuteReader())


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

Author Comment

ID: 38762477
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 ?
LVL 143

Accepted Solution

Guy Hengel [angelIII / a3] earned 500 total points
ID: 38762482
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();

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.
Revamp Your Training Process

Drastically shorten your training time with WalkMe's advanced online training solution that Guides your trainees to action.


Author Closing Comment

ID: 38762504
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?
LVL 143

Expert Comment

by:Guy Hengel [angelIII / a3]
ID: 38762539
>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.

Author Comment

ID: 38762725
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!

Featured Post

PeopleSoft Has Never Been Easier

PeopleSoft Adoption Made Smooth & Simple!

On-The-Job Training Is made Intuitive & Easy With WalkMe's On-Screen Guidance Tool.  Claim Your Free WalkMe Account Now

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Sometimes in DotNetNuke module development you want to swap controls within the same module definition.  In doing this DNN (somewhat annoyingly) swaps the Skin and Container definitions to the default admin selections.  To get around this you need t…
User art_snob ( encountered strange behavior of Android Web browser on his Mobile Web site. It took a while to find the true cause. It happens so, that the Android Web browser (at least up to OS ver. 2.…
If you’ve ever visited a web page and noticed a cool font that you really liked the look of, but couldn’t figure out which font it was so that you could use it for your own work, then this video is for you! In this Micro Tutorial, you'll learn yo…
Do you want to know how to make a graph with Microsoft Access? First, create a query with the data for the chart. Then make a blank form and add a chart control. This video also shows how to change what data is displayed on the graph as well as form…

630 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question