Новый триал [сборка 13196].
Привет всем.
В новом триале провайдера добавлено свойство инициализации и набора рядов named_param_rules, которое позволяет сохранять префикс в имени параметра запроса. Вот пример, с использованием нашего ADO.NET провайдера для OLEDB:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 | 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 |