86 lines
3.6 KiB
C#
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);
|
|
}
|
|
}
|
|
}
|
|
}
|