(пожалуйста, прочтите раздел обновлений ниже, я также оставляю исходный вопрос для ясности)
Я вставляю много файлов в базу данных SQL Server, настроенную для файлового потока.
Я вставляю в цикл файлы из папки в таблицу базы данных.
Все идет нормально, пока я не попробую вставить файл 600 МБ.
Когда он вставляет его, в диспетчере задач используется память +600 МБ, и у меня есть ошибка.
Размер БД составляет ‹1 ГБ, а общий размер документов - 8 ГБ, я использую SQL Server Express R2, и, согласно документации, у меня могут возникнуть проблемы только при попытке вставить документ размером более 10 ГБ (ограничение Express ) - Текущий размер БД.
Может ли кто-нибудь сказать мне, почему у меня эта ошибка? Для меня это очень важно.
ОБНОВЛЕНИЕ НАПРАВЛЕНИЯ:
Я предложил 150, потому что для меня это очень важно!
Похоже, это ограничение Delphi memory Manager, пытаясь вставить документ размером более 500 МБ, я не проверял точный порог в любом случае, он составляет от 500 до 600 МБ). Я использую компоненты SDAC, в частности TMSQuery (но я думаю, что то же самое можно сделать и с потомком TDataset), чтобы вставить документ в таблицу, в которой есть поле PK (ID_DOC_FILE) и поле varbinary (max) (DOCUMENT). :
procedure UploadBigFile;
var
sFilePath: String;
begin
sFilePath := 'D:\Test\VeryBigFile.dat';
sqlInsertDoc.ParamByName('ID_DOC_FILE').AsInteger := 1;
sqlInsertDoc.ParamByName('DOCUMENT').LoadFromFile(sFilePath, ftblob);
sqlInsertDoc.Execute;
sqlInsertDoc.Close;
end;
Команда SDAC сказала мне, что это ограничение диспетчера памяти Delphi. Теперь, поскольку SDAC не поддерживает файловый поток, я не могу сделать то, что было предложено в C # в первом ответе. Единственное решение сообщает Embarcadero и просит исправить ошибку?
ОКОНЧАТЕЛЬНОЕ ОБНОВЛЕНИЕ:
Спасибо, правда, всем, кто мне ответил. Конечно, вставка больших двоичных объектов может быть проблемой для Express Edition (из-за ограничений в 1 ГБ оперативной памяти), в любом случае у меня была ошибка в версии Enterprise, и это была ошибка «delphi», а не ошибка сервера sql. Поэтому я думаю, что ответ, который я принял, действительно решает проблему, даже если у меня сейчас нет времени проверять его.