Esatto, ho una classe DbManager che utilizzo ovunque mi serve il database.
Nei metodi che ho implementato, apro e chiudo la connessione al Database in maniera corretta.
Ti posto la classe:

codice:
using System;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
using System.Data.Odbc;
using System.Data.OleDb; 
using log4net; 

namespace Utility
{
	/// <summary>
	/// Summary description for DBManager.
	/// </summary>
	public class DBManagerOle
	{

		private OleDbConnection objConn;
		private OleDbTransaction  objSqlTransaction;
		private Boolean bUseTransaction = false;
	
		//Definizione LOG4NET
		private static readonly ILog Log = LogManager.GetLogger(typeof(DBManagerOle));
		
		public DBManagerOle()
		{
		
		}
		public DBManagerOle(string connectionString)
		{
			
			objConn = new OleDbConnection();
			// TODO: Modify the connection string and include any
			// additional required properties for your database.
			objConn.ConnectionString = connectionString;

			Log.Info("Costruttore DbMAnager inizializzato correttamente. Istanza Connessione eseguita");
		}


		

		private void OpenConnection()
		{
			try
			{
				objConn.Open();
			}
			catch(OleDbException Err)
			{
				Log.Error(Err.Message,Err); 
				throw;
			}
			catch(Exception Err)
			{
				Log.Error(Err.Message,Err); 
				throw;
			}
		}

		//Start transazione
		public void BeginTransaction()
		{
			OpenConnection();
			bUseTransaction = true;
			objSqlTransaction = objConn.BeginTransaction();
		}

		//Commit Transazione
		public void CommitTransaction()
		{
			bUseTransaction = false;
			objSqlTransaction.Commit();
			CloseConnection();
		}


		//RollBack Transazione
		public void RollBackTransaction()
		{
			bUseTransaction = false;
			objSqlTransaction.Rollback();
			CloseConnection();
		}


		public string ConnectionState()
		{
			return objConn.State.ToString();
		}


		public OleDbDataReader GetDataReader(string SQL)
		{
			OleDbCommand objCommand= new OleDbCommand ();
			try
			{
				string sConnState = ConnectionState();
				if (sConnState.CompareTo("Open")!=0)
				{
					OpenConnection();
				}
				if (bUseTransaction == true)
				{
					objCommand.Transaction =  objSqlTransaction;
				}
				objCommand.Connection = objConn;
				objCommand.CommandText = SQL;
				objCommand.CommandTimeout = 0;

				if (bUseTransaction == true)
				{
					return objCommand.ExecuteReader();
				}
				else
				{
					return objCommand.ExecuteReader(CommandBehavior.CloseConnection);
				}
			}
			catch (OleDbException Err)
			{
				Log.Error(Err.Message ,Err);
				throw;
			}
			catch (Exception Err)
			{
				Log.Error(Err.Message ,Err);
				throw;
			}
		}


		public OleDbDataReader GetDataReader(OleDbCommand comandoSQL)
		{
			OleDbCommand objCommand= comandoSQL;
			try
			{
				string sConnState = ConnectionState();
				if (sConnState.CompareTo("Open")!=0)
				{
					OpenConnection();
				}
				if (bUseTransaction == true)
				{
					objCommand.Transaction = objSqlTransaction;
				}
				objCommand.Connection = objConn;
				//objCommand.CommandText = SQL;
				objCommand.CommandTimeout = 0;

				if (bUseTransaction == true)
				{
					return objCommand.ExecuteReader();
				}
				else
				{
					return objCommand.ExecuteReader(CommandBehavior.CloseConnection);
				}
			}
			catch (OleDbException Err)
			{
				Log.Error(Err.Message ,Err);
				throw;
			}
			catch (Exception Err)
			{
				Log.Error(Err.Message ,Err);
				throw;
			}
		}
				

		public DataSet GetDataSet	(OleDbCommand comandoSQL , string DataTable)
		{
			DataSet dstEorder = new DataSet();
			OleDbDataAdapter dadEorder; 
			OleDbCommand objCommand = comandoSQL;

			try
			{
				string sConnState = ConnectionState();
				if (sConnState.CompareTo("Open")!=0)
				{
					OpenConnection();
				}

				//Transazione si/no
				if (bUseTransaction == true)
				{
					objCommand.Transaction = objSqlTransaction;
				}
				objCommand.Connection = objConn;
				objCommand.CommandTimeout = 0;
				
				dadEorder = new OleDbDataAdapter(objCommand);
				dadEorder.Fill(dstEorder, DataTable);

				return dstEorder;
			}
			catch ( Exception Err)
			{
				Log.Error(Err.Message ,Err);
				throw Err;                                  
			}
			finally
			{
				CloseConnection();
			}
		}





		private void CloseConnection()
		{
			objConn.Close();
			//objConn.Dispose();
		}

		public void updateDB(string SQL)
		{
			OleDbCommand objCommand= new OleDbCommand ();
			try
			{
				string sConnState = ConnectionState();
				if (sConnState.CompareTo("Open")!=0)
				{
					OpenConnection();
				}
				if (bUseTransaction == true)
				{
					objCommand.Transaction = objSqlTransaction;
				}
				objCommand.Connection = objConn;
				objCommand.CommandText = SQL;
				objCommand.CommandTimeout = 0;
				objCommand.ExecuteNonQuery();
			}
			catch (OleDbException Err)
			{
				Log.Error(Err.Message ,Err);
				throw;
			}
			catch (Exception Err)
			{
				Log.Error(Err.Message ,Err);
				throw;
			}			
			finally
			{
				if (bUseTransaction == false)
				{
					CloseConnection();
				}
			}
		}



		public void updateDB(OleDbCommand comandoSQL)
		{
			OleDbCommand objCommand= comandoSQL;
			try
			{
				string sConnState = ConnectionState();
				if (sConnState.CompareTo("Open")!=0)
				{
					OpenConnection();
				}
				if (bUseTransaction == true)
				{
					objCommand.Transaction = objSqlTransaction;
				}
				objCommand.Connection = objConn;
				//objCommand.CommandText = SQL;
				objCommand.CommandTimeout = 0;
				objCommand.ExecuteNonQuery();
			}
			catch (OleDbException Err)
			{
				Log.Error(Err.Message ,Err);
				throw;
			}
			catch (Exception Err)
			{
				Log.Error(Err.Message ,Err);
				throw;
			}			
			finally
			{
				if (bUseTransaction == false)
				{
					CloseConnection();
				}
			}
		}


		
		public int ExecuteScalar(string sql)
		{
			try
			{
				OleDbCommand objectCommand= new OleDbCommand();
				string connState = ConnectionState();
				
				if (connState.CompareTo("Open")!=0)
				{
					OpenConnection();
				}
				if (bUseTransaction == true)
				{
					objectCommand.Transaction = objSqlTransaction;
				}
				objectCommand.Connection = objConn;
				objectCommand.CommandText = sql;
				objectCommand.CommandTimeout = 0;
				
				return (int) objectCommand.ExecuteScalar();


			}
			catch (OleDbException Err)
			{
				Log.Error(Err.Message ,Err);
				throw;
			}
			catch (Exception Err)
			{
				Log.Error(Err.Message ,Err);
				throw;
			}			
			finally
			{
				if (bUseTransaction == false)
				{
					CloseConnection();
				}
			}
		}
		

		public int ExecuteScalar(OleDbCommand comandoSQL)
		{
			try
			{
				OleDbCommand objectCommand= comandoSQL;
				string connState = ConnectionState();
				
				if (connState.CompareTo("Open")!=0)
				{
					OpenConnection();
				}
				if (bUseTransaction == true)
				{
					objectCommand.Transaction = objSqlTransaction;
				}
				objectCommand.Connection = objConn;
				//objectCommand.CommandText = sql;
				objectCommand.CommandTimeout = 0;
				
				return  (int)objectCommand.ExecuteScalar();


			}
			catch (OleDbException Err)
			{
				Log.Error(Err.Message ,Err);
				throw;
			}
			catch (Exception Err)
			{
				Log.Error(Err.Message ,Err);
				string query = this.ricostruisciQuery(comandoSQL);
				throw;
			}			
			finally
			{
				if (bUseTransaction == false)
				{
					CloseConnection();
				}
			}
		}




		public int ExecuteNonQuery(string sql)
		{
			try
			{
				OleDbCommand objectCommand= new OleDbCommand();
				string connState = ConnectionState();
				
				if (connState.CompareTo("Open")!=0)
				{
					OpenConnection();
				}
				if (bUseTransaction == true)
				{
					objectCommand.Transaction = objSqlTransaction;
				}
				objectCommand.Connection = objConn;
				objectCommand.CommandText = sql;
				objectCommand.CommandTimeout = 0;
				
				return (int) objectCommand.ExecuteNonQuery ();


			}
			catch (OleDbException Err)
			{
				Log.Error(Err.Message ,Err);
				throw;
			}
			catch (Exception Err)
			{
				Log.Error(Err.Message ,Err);
				throw;
			}			
			finally
			{
				if (bUseTransaction == false)
				{
					CloseConnection();
				}
			}
		}

		public int ExecuteNonQuery(OleDbCommand comandoSQL)
		{
			try
			{
				OleDbCommand objectCommand= comandoSQL;
				string connState = ConnectionState();
				
				if (connState.CompareTo("Open")!=0)
				{
					OpenConnection();
				}
				if (bUseTransaction == true)
				{
					objectCommand.Transaction = objSqlTransaction;
				}
				objectCommand.Connection = objConn;
				//objectCommand.CommandText = sql;
				objectCommand.CommandTimeout = 0;
				
				return (int) objectCommand.ExecuteNonQuery ();


			}
			catch (OleDbException Err)
			{
				Log.Error(Err.Message ,Err);
				string query = this.ricostruisciQuery(comandoSQL);
				throw;
			}
			catch (Exception Err)
			{
				Log.Error(Err.Message ,Err);
				string query = this.ricostruisciQuery(comandoSQL);
				Log.Error("Errore nella query : " + query);
				throw;
			}			
			finally
			{
				if (bUseTransaction == false)
				{
					CloseConnection();
				}
			}
		}
		
	}
}