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