Вести с полей. Запросы с «RETURNING INTO»
Привет всем.
Вчера выложили бинарники очередного релиза IBProvider’a — сборка 3.15.0.14897. С моей точки зрения в этом выпуске выправлена внутренняя архитектура провайдера и закрыты накопившиеся висяки в отношении пока еще не выпущенного Firebird 3. С пользовательской точки зрения это выглядит так.
Но, как говорится, это дела минувших дней. На повестке дня у нас реализация следующей моей давней идеи — явное указание имен для OUT-параметров в запросах вида «INSERT … RETURNING», «UPDATE .. RETURNING» и так далее.
Предлагаю не изобретать велосипед, а украсть позаимствовать синтаксис из PSQL — «… RETURNING … INTO …».
Выглядеть это будет приблизительно так:
using System; using System.Data; using xdb=lcpi.data.oledb; namespace ConsoleApplication { class Program { static void Main(string[] args) { const string c_cn_str ="provider=LCPI.IBProvider.3;" +"location=localhost:d:\\database\\ibp_test_fb25_d3.gdb;" +"user id=gamer;" +"password=vermut;"; try { using(var cn=new xdb.OleDbConnection(c_cn_str)) { cn.Open(); using(var tr=cn.BeginTransaction(IsolationLevel.RepeatableRead)) { using(var cmd=new xdb.OleDbCommand("",cn,tr)) { cmd.CommandText="insert into NUM (N_4_0) values (4321)\n" +"returning -TEST_ID, -N_4_0\n" +"into :a, :b"; cmd.Parameters.Refresh(); var rows_affected=cmd.ExecuteNonQuery(); Console.WriteLine("RowsAffected: {0}",rows_affected); Console.WriteLine("a: {0}",cmd["a"].Value); Console.WriteLine("b: {0}",cmd["b"].Value); }//using cmd tr.Rollback(); }//using tr }//using cn } catch(Exception exc) { Console.WriteLine("ERROR: [{0}] - {1}",exc.Source,exc.Message); } }//Main }//class Program }//ConsoleApplication
На выходе получается что-то вроде:
Мне нравится. А остальным придется смириться 🙂
dimitr on 12 апреля, 2013
велосипед изобретаешь?
returning -TEST_ID as A, -N_4_0 as B