Publish date: 2017-05-07
Usage of connection pool from «LCPI OLE DB Services». (C#)
////////////////////////////////////////////////////////////////////////////////
//Samples for LCPI ADO.NET Data provider for OLEDB.
// 07.05.2017.
using System;
using System.Data;
using System.Diagnostics;
using lcpi.data.oledb;
using structure_lib=lcpi.lib.structure;
namespace Sample_0025{
////////////////////////////////////////////////////////////////////////////////
//class Program
class Program
{
//OLE DB Services
// - MSDASC.MSDAINITIALIZE.1
// - LCPI.OleDbServices.DataInitManager.Global.1
// - LCPI.OleDbServices.DataInitManager.Local.1
private const string c_ProgID_OleDbServices
="LCPI.OleDbServices.DataInitManager.Global.1";
//Direct connection to Firebird DBMS
private const string c_cn_str
="provider=LCPI.IBProvider.3;"
+"location=localhost:d:\\database\\fb_03_0_0\\ibp_test_fb30_d3.gdb;" //any FB database
+"dbclient_type=fb.direct;"
+"user id=SYSDBA;"
+"password=masterkey;";
//-----------------------------------------------------------------------
static int Main()
{
int resultCode=0;
try //[catch]
{
using(OleDbServices services=new OleDbServices(c_ProgID_OleDbServices))
{
for(uint pass=0;pass!=3;)
{
++pass;
Console.WriteLine("----------------------- pass: {0}",pass);
for(uint nCns=1;nCns!=4;++nCns)
{
Console.WriteLine("------- nCns: {0}",nCns);
var cns=new OleDbConnection[nCns];
try //finally
{
for(uint iCn=0;iCn!=nCns;++iCn)
{
cns[iCn]=services.CreateConnection(c_cn_str); //throw
cns[iCn].Open(); //throw
Console.WriteLine("{0}. {1}",iCn+1,Helper__GetCnSign(cns[iCn])); //throw
}
}
finally
{
for(uint iCn=0;iCn!=nCns;++iCn)
structure_lib.DisposeUtils.Exec(ref cns[iCn]);
}//finally
}//for nCn
}//for pass
}//using services
}
catch(Exception exc)
{
resultCode=1;
Console.WriteLine("ERROR: {0} - {1}",exc.Source,exc.Message);
}//catch
return resultCode;
}//main
//-----------------------------------------------------------------------
private static string Helper__GetCnSign(OleDbConnection cn)
{
string result;
using(var tr=cn.BeginTransaction())
{
using(var cmd=new OleDbCommand(null,cn,tr))
{
cmd.CommandText
="select CURRENT_CONNECTION, CURRENT_TRANSACTION from RDB$DATABASE";
using(var reader=cmd.ExecuteReader())
{
if(!reader.Read())
throw new ApplicationException("No record!");
result=string.Format("connection: {0}, transaction: {1}",
reader[0],
reader[1]);
}//using reader
}//using cmd
tr.Commit();
}//using tr
return result;
}//Helper__GetCnSign
};//class Program
////////////////////////////////////////////////////////////////////////////////
}//nms Sample_0025
Output.
