[InterBase] ADO.NET провайдер - работа с UTF8 строками через параметры
От: andrey82  
Дата: 22.01.14 17:58
Оценка:
InterBase XE3 (Developer Edition), клиент C#/.NET 2.0 с использованием ADO.NET провайдера из комплекта поставки InterBase.

В строке соединения с БД указан параметр character set=UTF8;
БД создана с указанием Default Character Set = UTF8 (хотя это не принципиально)
В БД создана таблица с текстовым полем
"Field1" VARCHAR(100) CHARACTER SET UTF8

Такая SQL команда выполняется без проблем:
INSERT INTO "Table1" ("Field1") VALUES (_UTF8'Проверка')

Выполняю примерно так:
var conn = Borland.Data.TAdoDbxInterBaseProviderFactory.Instance.CreateConnection()
conn.ConnectionString = ...;
conn.Open();

using (var cmd = conn.CreateCommand())
{
  cmd.CommandType = System.Data.CommandType.Text;
  cmd.CommandText = sqlCommandText;
  cmd.ExecuteNonQuery();
}


Хочется сделать через параметры:
INSERT INTO "Table1" ("Field1") VALUES (@par1)

Добавляю параметры:
var parameters = new List<Borland.Data.TAdoDbxParameter>();

var p = (Borland.Data.TAdoDbxParameter)cmd.CreateParameter();
p.ParameterName = "par1";
p.Value = "Проверка";

parameters.Add(p);

cmd.Parameters.AddRange(parameters.ToArray());

Получаю исключение с сообщением "arithmetic exception, numeric overflow, or string truncation Cannot transliterate character between character sets" (стек пока привести не могу).

Пробовал явно указывать информацию о типе (как рекомендуют в редких сообщениях на форумах Embarcadero)
p.DbType = System.Data.DbType.StringFixedLength;
p.Size = Encoding.UTF8.GetByteCount("Проверка")

не помогло

Вопрос: что еще можно подкрутить в свойствах команды/параметра? Аналогичная вставка данных (с использованием параметров) с числовыми полями (по крайней мере INT и DOUBLE PRECISION) работает без проблем.
interbase utf8 tadodbxparameter
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.