using Microsoft.Practices.EnterpriseLibrary.Data; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; namespace DataAccessLayer { public static class ConnectionPool { private static List connectionPool = new List(); private static object poolAccessLock = new object(); public static void InitializePool(List> poolRecords) { for (int i = 0; i < poolRecords.Count; i++) { string connectionString = poolRecords[i].Item1; bool isOracleDb = poolRecords[i].Item2; int amount = poolRecords[i].Item3; for (int j = 0; j < amount; j++) { connectionPool.Add(new SingleConnection(connectionString, isOracleDb)); } } } public static SingleConnection GetDataBase(DBProvider dbProvider) { string connString = string.Empty; bool oracleDb = false; switch (dbProvider) { case DBProvider.SqlServer: connString = WebConfigParameter.getConnectionString("SqlServerConnection"); break; case DBProvider.SqlServerStampeC6: connString = WebConfigParameter.getConnectionString("SqlServerStampeC6Connection"); break; case DBProvider.SqlServerConsulenzaBase: connString = WebConfigParameter.getConnectionString("SqlServerConnectionConsulenzaBase"); break; case DBProvider.SqlServerConsulenzaUnica: connString = WebConfigParameter.getConnectionString("SqlServerConsulenzaUnicaConnection"); break; case DBProvider.SqlServerConsulenzaEvoluta: connString = WebConfigParameter.getConnectionString("SqlServerConsulenzaEvolutaConnection"); break; case DBProvider.SqlServerCatalogoProdotti: connString = WebConfigParameter.getConnectionString("SqlServerCatalogoProdottiConnection"); break; case DBProvider.SqlServerReportModeler: connString = WebConfigParameter.getConnectionString("SqlServerConnectionReportModeler"); break; case DBProvider.SqlServerWebTemplateReportModeler: connString = WebConfigParameter.getConnectionString("SqlServerConnectionWebTemplateReportModeler"); break; case DBProvider.SqlServerReportArchive: connString = WebConfigParameter.getConnectionString("SqlServerConnectionReportArchive"); break; case DBProvider.Oracle: connString = WebConfigParameter.getConnectionString("OracleConnection"); oracleDb = true; break; } while (true) { lock (poolAccessLock) { foreach (SingleConnection sqc in connectionPool) { if (!sqc.IsInUse && sqc.ConnectionString == connString && sqc.IsOracleDb == oracleDb) { sqc.IsInUse = true; return sqc; } } } Thread.Sleep(20); } } } }