Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Улучшение производительности: запись файлов в SQL Server 2019 с использованием Delphi 10.3 и ADOQuery

Delphi , Базы данных , SQL

Введение

В современном мире разработки программного обеспечения часто возникает необходимость хранения различного рода файлов в базе данных. Одним из распространенных решений является использование SQL Server и его возможности по работе с типами данных, такими как varbinary(max). В данной статье мы рассмотрим, как можно оптимизировать процесс записи файлов в базу данных SQL Server 2019 с помощью компонента ADOQuery в среде разработки Delphi 10.3.

Задача

Разработчики, работающие с Delphi 10.3 и SQL Server 2019, сталкиваются с задачей хранения различных файлов (PDF, TXT, DOCX и т.д.) в таблице Personal_Files. Таблица содержит колонку с расширением файла (тип varchar) и колонку varbinary(max) для хранения самого файла.

Проблема

При попытке записи файлов в базу данных возникают трудности с корректным преобразованием потока файла в формат, поддерживаемый параметрами ADOQuery. В частности, была попытка использовать Base64 кодирование, но это привело к увеличению размера данных и не гарантировало корректность записи.

Пример кода

var
    Input, Output: TStream;
    FName:        TFileName;
begin
    // Создание потоков и кодирование в Base64 (пример, который не работал)
    Input  := TFileStream.Create(FName, fmOpenRead);
    Output := TFileStream.Create(FName + 'Temp', fmCreate);
    TNetEncoding.Base64.Encode(Input, Output);
    // ... // Некоторые проверки

    // В компоненте ADOQuery была попытка записи следующим образом:
    with ADOQuery, SQL do
    begin
        Close;
        Clear;
        Add('INSERT INTO MyDatabase.dbo.MyFilesTable (EXTENSION, FILEBIN)');
        Add('VALUES (:wextension, :wfilebin)');
        Parameters.ParamByName('wextension').Value := TPath.GetExtension(FName);
        Parameters.ParamByName('wfilebin').Value := Output.ToString;
        ExecSQL;
    end;

Решение

Исходя из комментариев в контексте вопроса, было предложено изменить способ задания параметра для записи потока файла в базу данных. Использование метода LoadFromStream с указанием типа данных ftVarBytes позволило успешно записать файл в таблицу.

with ADOQuery, SQL do
begin
    Close;
    Clear;
    Add('INSERT INTO MyDatabase.dbo.MyFilesTable (EXTENSION, FILEBIN)');
    Add('VALUES (:wextension, :wfilebin)');
    Parameters.ParamByName('wextension').Value := TPath.GetExtension(FName);
    Parameters.Items[1].LoadFromStream(Output, ftVarBytes);
    ExecSQL;
end;

Важные замечания

Хотя предложенный метод решения проблемы позволяет записать файлы в базу данных, следует учесть, что это не рекомендуемый способ хранения файлов. Рекомендуется хранить файлы в файловой системе, Azure Blob Storage или S3 storage. Это снижает затраты на хранение данных в базе, ускоряет процесс бэкапа и уменьшает время восстановления после сбоев.

Кроме того, было отмечено, что использование Base64 приводит к увеличению размера данных на 33%, что неэффективно. Также стоит избегать использования конструкции with, так как она может быть источником ошибок.

Заключение

В данной статье мы рассмотрели проблему записи файлов в SQL Server 2019 с использованием Delphi 10.3 и ADOQuery, а также предложили решение, основанное на использовании метода LoadFromStream. Однако следует помнить о рекомендациях по хранению файлов вне базы данных и о потенциальных проблемах, связанных с использованием конструкции with.

Создано по материалам из источника по ссылке.

Улучшение производительности записи файлов в SQL Server 2019 с использованием Delphi 10.3 и ADOQuery.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: SQL ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-02-05 13:59:09/0.0051891803741455/1