Дата публикации: 16.06.2023

Сброс настроек сессии перед повторным использованием подключения (С#, FB4)

Этот пример демонстрирует неявное использование «ALTER SESSION RESET» при повторном использовании подключения.

Для выполнения примера требуется Firebird v4 и 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 of sample.
Вывод.