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) работает без проблем.