Дата публикации: 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 обязательна.