Dispose also returns the connection to the connection pool Regards
Richard Blewett - DevelopMentor > -----Original Message----- > From: Discussion of advanced .NET topics. [mailto:ADVANCED- > [EMAIL PROTECTED] On Behalf Of Smotritsky, Alex > Sent: 16 October 2007 22:01 > To: [email protected] > Subject: Re: [ADVANCED-DOTNET] Singleton and Database Connection > challange > > The open and close methods of the connection object in ado.net usually > take the connection from the connection pool on open and return it on > close so you get connection pooling for free. > > -----Original Message----- > From: Discussion of advanced .NET topics. > [mailto:[EMAIL PROTECTED] On Behalf Of Mike Andrews > Sent: Tuesday, October 16, 2007 2:34 PM > To: [email protected] > Subject: Re: [ADVANCED-DOTNET] Singleton and Database Connection > challange > > This is not the place for a singleton and the singleton is not > implemented > correctly since it doesn't take into account any race conditions that > might > occur with a multi-threaded app such as asp.net. Also you would not > want to > dispose of the connection in the singleton since that defeats the > purpose of > the singleton. > The connection should be created and destroyed when needed and not kept > live > by using the singleton. > > > On 10/16/07, Abhijit Gadkari <[EMAIL PROTECTED]> wrote: > > > > We are writing an ASP.NET application. We have used singleton for > > instantiating a database connection as explained in the following > code > > sample. > > > > > > > > Design thought was to use only one instance of MyDb across all the > pages > > in > > this web application. Is this a correct singleton implementation for > > Asp.NETweb application for managing database connection? In fact, > this > > code got C - > > or D in our internal code review. Don't know why? Any idea on how to > > improve > > this code to A level. > > > > > > > > public sealed class AppDbProvider : IDisposable > > > > { > > > > public static readonly AppDbProvider instance = new > > AppDbProvider(); > > > > > > > > private readonly MyDb _d = new MyDb(ConfigurationManager > > .ConnectionStrings["my_connection"].ConnectionString, > > > > ConfigurationManager.ConnectionStrings[ > > "my_connection"].ProviderName); > > > > > > > > public MyDb GetDbConnection() > > > > { > > > > if (_d != null) > > > > return _d; > > > > else > > > > throw new Exception("Problem with Database Connection > in > > AppDbProvider."); > > > > } > > > > > > > > #region IDisposable Members > > > > > > > > public void Dispose() > > > > { > > > > if (_d != null) > > > > _d.Dispose(); > > > > > > > > Dispose(); > > > > > > > > } > > > > > > > > #endregion > > > > } > > > > > > > > Now in code behind file, we have following code > > > > > > > > > > > > public partial class CreatePage > > > > { > > > > private AmgDb _d; > > > > > > > > try > > > > { > > > > _d = AppDbProvider.instance.GetDbConnection(); > > > > } > > > > Catch (Exception exce) > > > > { > > > > Response.write(exce.message); > > > > } > > > > > > > > } > > > > > > > > And in the end, in the page unload event we have following cleanup > code > > > > > > > > protected void Page_Unload(object sender, EventArgs e) > > > > { > > > > if (_d != null) > > > > { > > > > _d = null; > > > > } > > > > } > > > > =================================== > > This list is hosted by DevelopMentor(r) http://www.develop.com > > > > View archives and manage your subscription(s) at > > http://discuss.develop.com > > > > =================================== > This list is hosted by DevelopMentor(r) http://www.develop.com > > View archives and manage your subscription(s) at > http://discuss.develop.com > > =================================== > This list is hosted by DevelopMentor. http://www.develop.com > > View archives and manage your subscription(s) at > http://discuss.develop.com =================================== This list is hosted by DevelopMentor® http://www.develop.com View archives and manage your subscription(s) at http://discuss.develop.com
