Новый триал [сборка 13196].
Привет всем.
В новом триале провайдера добавлено свойство инициализации и набора рядов named_param_rules, которое позволяет сохранять префикс в имени параметра запроса. Вот пример, с использованием нашего ADO.NET провайдера для OLEDB:
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