Want to protect your cyber security and still get fast solutions? Ask a secure question today.Go Premium

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 533
  • Last Modified:

Do I need to close an OleDbCommand?

Hi,

I just wondered if I need to close this object?  Or is going out of scope enough?

OleDbCommand dbSelectCommand = new OleDbCommand();

Thanks,
Bob
0
ba272
Asked:
ba272
3 Solutions
 
deanvanrooyenCommented:
hi bob,

theoretically with garbage collection there should be no worries, and by close -  do you mean close the db connection or just set  dbSelectCommand to null....

0
 
ba272Author Commented:
I never thought about setting the dbSelectCommand to null.   Glad I asked.

I call Close() explicitly for connections, but wondered if needed to do anything with dbSelectCommand.

Set it to null then?
0
 
jjardineCommented:
A good idea is to call the dispose method when you are finished with the object.  It is true that the garbage collector will pick it up but by default it will take 2 trips for the gc to collect it  This is due to the fact that the first sweep by the gc just calls the finalizer.  Then, the next time the gc runs it will collect the garbage.  if you call the dispose method it will call gc.suppressfinalize and the next time the gc runs it will clean up your resources.
0
Concerto Cloud for Software Providers & ISVs

Can Concerto Cloud Services help you focus on evolving your application offerings, while delivering the best cloud experience to your customers? From DevOps to revenue models and customer support, the answer is yes!

Learn how Concerto can help you.

 
ba272Author Commented:
Do I call Dispose() then set it to null?
0
 
BlackTigerXCommented:
the preferred method is to use "using"

using (OleDbCommand dbSelectCommand = new OleDbCommand()) {
  //use it here
}

that takes care of the cleanup and lets the GC know that you don't need it anymore, it is always recommended that you use "using" for anything that implements IDisposable, such as database classes, reading files, etc
0
 
BlackTigerXCommented:
"using" is like instantiating the object, then using a try..finally and dispose the object at the end

see http://davidhayden.com/blog/dave/archive/2005/01/13/773.aspx for more information

http://ebersys.blogspot.com
0
 
ba272Author Commented:
I make extensive use of a "finally" block where I Close() the connection, so I think to minimize work for myself, I'll add Dispose() into that structure.  My program is large.

Thanks.
0
 
ba272Author Commented:
how about an OleDbDataReader?  Is calling Close() enough?
0
 
BlackTigerXCommented:
the preferred method is to use "using" because it encapsulates the pattern of doing

instantiate object
try {
//work with object
finally {
  Dispose()
}

so it's safer (since you might forget to add the try..finally) and it saves you lines of code
0

Featured Post

Free Tool: SSL Checker

Scans your site and returns information about your SSL implementation and certificate. Helpful for debugging and validating your SSL configuration.

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.

Tackle projects and never again get stuck behind a technical roadblock.
Join Now