Дата публикации: 06.09.2012
IBProvider 3.12. Новые возможности для именованных параметров и вложенных транзакций
Поддержка именованных параметров.
Добавлено новое свойство инициализации источника данных и команды – «named_param_rules». Пример использования:
//Use
// - Firebird SQL Server v2.5.2
// - LCPI.IBProvider v3.12
// - LCPI ADO.NET Data Provider for OLE DB
using System;
using System.Data;
using xdb=lcpi.data.oledb;
namespace ConsoleApplication
{
class Program
{
static void Main(string[] args)
{
try
{
const string c_cn_str
="provider=LCPI.IBProvider.3;"
+"location=localhost:d:\\database\\employee.fdb;"
+"user id=SYSDBA;"
+"password=masterkey;"
+"named_param_prefix=@;"
+"named_param_rules=1";
using(var cn=new xdb.OleDbConnection(c_cn_str))
{
cn.Open();
using(var tr=cn.BeginTransaction(IsolationLevel.RepeatableRead))
{
var cmd=new xdb.OleDbCommand("select * from employee where first_name=@name",cn,tr);
//use an explicit definition
cmd.Parameters.AddWithValue("@name","Roger");
//small optimization through hint "SingleResult"
using(var reader=cmd.ExecuteReader(CommandBehavior.SingleResult))
{
//Test result set. We get false for empty result set. Really.
if(reader.HasRows)
{
//reuse the command for update query
cmd.CommandText="update employee set first_name=upper(first_name)\n"
+"where emp_no=@emp_id\n"
+"returning old.first_name";
//ask provider to generate the parameters list
cmd.Parameters.Refresh();
for(int n=1;reader.Read();++n)
{
cmd["@emp_id"].Value=reader["emp_no"];
cmd.ExecuteNonQuery();
Console.WriteLine("{0}. Update emp_no: {1}. Old first_name: \"{2}\"",
n,
reader["emp_no"],
cmd["@first_name"].Value);
}//while reader
}//if HasRows
}//using reader
}//using tr
}//using cn
}
catch(Exception e)
{
Console.WriteLine("ERROR: {0} - {1}",
e.Source,
e.Message);
}//catch
}//Main
}//class Program
}//namespace ConsoleApplication
Вложенные транзакции.
По-умолчанию, новый IBProvider запрещает коммит транзакции, если она содержит активные вложенные транзакции. Кроме того, новый провайдер, по-умолчанию, запрещает освобождение точки сохранения, если эта точка сохранения содержит активные вложенные транзакции. Новое свойство инициализации источника данных «nested_trans_rules» позволяет настраивать это новое поведение. Пример нового поведения IBProvider-a:
option explicit
rem Use
rem - Firebird SQL Server v2.5.2
rem - LCPI.IBProvider v3.12
dim cn
set cn=createobject("ADODB.Connection")
cn.Provider="LCPI.IBProvider.3"
call cn.Open("location=localhost:d:\database\employee.fdb;" _
+"nested_trans=true", _
"gamer", _
"vermut")
call cn.BeginTrans() 'level 1
call cn.BeginTrans() 'level 2
dim tr1
set tr1=createobject("LCPI.IBP.Samples.TransactionLevel.1")
call tr1.Attach(cn,1)
on error resume next
'error
call tr1.Commit(false)
wscript.echo "["&err.Source&"]"&vbCrLf&err.Description
Вывод:

Другие изменения.
- Исправление ошибок: утечка памяти, MT-ошибка, ошибки в работе с DTC и другое.
- Улучшена обработка ошибок.
- Оптимизация.
Тесты.
- Новая сборка была протестирована с InterBase (4.0-10.0.4) и Firebird (0.9.4-3.0).
- Выполнено нагрузочное тестирование с Firebird 2.5.2.
Дата публикации: 06.09.2012. Права на материал принадлежат: IBProvider. При перепечатке ссылка на сайт https://www.ibprovider.com/rus обязательна.
