Publish date: 2023-06-16
Resetting the session settings before reusing a connection (C#, FB4)
This example demonstrates the implicit execution of «ALTER SESSION RESET» when reusing a connection.
The example requires Firebird v4 and IBProvider v5.30.
//////////////////////////////////////////////////////////////////////////////// //Samples for LCPI ADO.NET Data provider for OLEDB. // ibprovider.com. 16.06.2023 using System; namespace Sample_0032{ //////////////////////////////////////////////////////////////////////////////// using xdb=lcpi.data.oledb; //////////////////////////////////////////////////////////////////////////////// //class Program class Program { private const string c_cn_str ="provider=LCPI.IBProvider.5;" +"location=inet4://localhost/d:\\database\\fb_04_0_0\\employee.fdb;" +"dbclient_type=fb.direct;" +"user id=SYSDBA;" +"password=masterkey;"; private const string c_test_sql ="select cast('1234567890123456.5' as DECFLOAT(16)) from RDB$DATABASE"; //----------------------------------------------------------------------- static int Main(string[] args) { int result = 0; try { Console.WriteLine("TEST SQL: {0}",c_test_sql); Console.WriteLine(""); for(int pass=0;pass!=3;) { ++pass; Console.WriteLine("-------------------- PASS {0}",pass); Exec(); } } catch(Exception e) { ++result; Console.WriteLine("ERROR: {0}",e.Message); }//catch return result; }//Main //----------------------------------------------------------------------- private static void Exec() { using(var cn=new xdb.OleDbConnection(c_cn_str)) { Console.WriteLine("Open connection ..."); cn.Open(); using(var tr=cn.BeginTransaction()) { using(var cmd=new xdb.OleDbCommand("select CURRENT_CONNECTION from RDB$DATABASE",cn,tr)) Console.WriteLine("Connection ID : {0}",cmd.ExecuteScalar()); // expected result: 1234567890123457 [HALF_UP round] using(var cmd=new xdb.OleDbCommand(c_test_sql,cn,tr)) Console.WriteLine("Default Round : {0}",cmd.ExecuteScalar()); using(var cmd=new xdb.OleDbCommand("SET DECFLOAT ROUND HALF_EVEN",cn,tr)) cmd.ExecuteNonQuery(); // expected result: 1234567890123456 [HALF_EVEN round] using(var cmd=new xdb.OleDbCommand(c_test_sql,cn,tr)) Console.WriteLine("HALF_EVEN Round: {0}",cmd.ExecuteScalar()); tr.Commit(); }//using tr }//using cn }//Exec }//class Program //////////////////////////////////////////////////////////////////////////////// }//namespace Sample_0032
Output.