2025-04-15 12:10:19 +02:00

86 lines
3.6 KiB
C#

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<SingleConnection> connectionPool = new List<SingleConnection>();
private static object poolAccessLock = new object();
public static void InitializePool(List<Tuple<string, bool, int>> 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);
}
}
}
}