Новый триал [сборка 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

Leave a Comment