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

Leave a Comment