Документация для Firebird подразумевает, что вы можете записать большие (> 60 КБ) строки в значение BLOB-объекта в таблице.Итак, если у вас есть это:
CREATE TABLE MyBlobTable (
theId int PRIMARY KEY NOT NULL,
theBlob BLOB SUB_TYPE 1
)
Тогда это должно работать:
insert into MyBlobTable (theId, theBlob) values (1, '[60K characters in a string]')
(пример, вдохновленный http://web.firebirdsql.org/dotnetfirebird/blob-sub_type-1-reading-example-csharp.html)
Но я обнаружил, что ни C #драйверы и FlameRobin не могут записать это значение. Вы получаете «Неожиданный конец команды» (указывающий на точку около 32 КБ в строке, что немного подозрительно)
Я полагаю, что существует особый способ процитировать или экранироватьзначения данных, или, возможно, эквивалент C # этого Java-кода (http://www.firebirdfaq.org/faq372/), где двоичный файл считывается непосредственно в оператор. Я не делаю ничего сложного с текстовыми данными, поэтому я открыт для хранения его в виде двоичного файлаblob, если необходимо.
Спасибо!
Обновление: "параметризованные запросы" - это фраза, которую я искал. Что я делаю:
FbParameter param = new FbParameter("@blobVal", FbDbType.Text);
param.Value = myLargeString;
String query = "insert into MyBlobTable (theId, theBlob) values (1, @blobVal)";
using (FbConnection conn = [something from my pool]) {
using (FbCommand cmd = new FbCommand(query, conn)) {
cmd.Parameters.Add(param);
cmd.ExecuteNonQuery();
}
}