Как записать файл в базу данных и считать его
Добавлено: 14 апр 2010, 08:10
В программу NHDBT, начиная с версии 1.3, включена дополнительная программа nhdbf.exe, позволяющая записывать файлы в поля LONGBINARY базы данных и считывать значения таких полей в файл.
Эти возможности могут помочь, если требуется занести большие объекты (фотографии, документы) в вашу базу данных или считать в файл документ, хранящийся в базе данных какой-либо информационной системы, не имеющей функцию сохранения в файл. Возможности SQL баз данных не всегда позволяют сделать такие операции записи или чтения файлов удобным образом, для таких случаев и добавлены эти возможности.
Рассмотрим операции с файлами на простом примере - dBASE, используем таблицу с документами:
В поле Document будет храниться содержимое документа (файл).
Для создания записи с копирование содержимого файла REPORT.DOC запускаем nhdbf.exe со следующими параметрами:
Первый "driver={Microsoft dBase driver (*.dbf)};dbq=." параметр задаёт базу данных, в примере используется текущий каталог.
Второй параметр задаёт запрос INSERT, в котором должен быть указано, в числе прочих, поле LONGBINARY со знаком вопроса вместо значения.
Третий параметр указывает путь и имя файла, который будет загружен в поле Document.
За один запуск программы можно добавить только одну запись. При этом в запросе можно указывать только одно поле LONGBINARY.
Повторяя запуск программы с другими параметрами, можно добавить ещё записи, например:
Аналогично добавлению, программа позволяет обновлять записи (UPDATE):
Второй параметр здесь уже задаёт запрос UPDATE. Если выбирается несколько строк (WHERE…), то содержимое поля Document будет обновлено во всех выбранных строках!
Для считывания содержимого поля Document из базы данных в файл необходимо подготовить SQL запрос SELECT, чтобы первым столбцом в наборе данных было поле LONGBINARY, а вторым - путь и имя файла. Такое условие сделано для того, чтобы за один запрос можно было считать более одной записи - программа для каждой записи из результирующего набора сохраняет файл, используя значение второго поля как имя файла, например:
Здесь программа обработает все записи из таблицы Documents, при этом для строки с id=25 документ будет сохранён в C:\Archives\2009\archive-2.dat и т.д.
Можно указывать в качестве второго поля и строковую константу, например:
В этом примере программа выберет одну запись (id=1) и запишет документ в сетевой файл \\server\reports\report-2452.doc.
В приложенном ZIP файле находится пример выполнения записи-чтения файлов с результатом выполнения
кодировка 866
Эти возможности могут помочь, если требуется занести большие объекты (фотографии, документы) в вашу базу данных или считать в файл документ, хранящийся в базе данных какой-либо информационной системы, не имеющей функцию сохранения в файл. Возможности SQL баз данных не всегда позволяют сделать такие операции записи или чтения файлов удобным образом, для таких случаев и добавлены эти возможности.
Рассмотрим операции с файлами на простом примере - dBASE, используем таблицу с документами:
Код: Выделить всё
create table Documents(id int,Document longbinary,Name char(32),Comment char(254));
Для создания записи с копирование содержимого файла REPORT.DOC запускаем nhdbf.exe со следующими параметрами:
Код: Выделить всё
nhdbf.exe "driver={Microsoft dBase driver (*.dbf)};dbq=." "insert into Documents (id,file,name,comment) values (1,?,'Отчёт.doc','Отчёт по форме 34')" report.doc
Второй параметр задаёт запрос INSERT, в котором должен быть указано, в числе прочих, поле LONGBINARY со знаком вопроса вместо значения.
Третий параметр указывает путь и имя файла, который будет загружен в поле Document.
За один запуск программы можно добавить только одну запись. При этом в запросе можно указывать только одно поле LONGBINARY.
Повторяя запуск программы с другими параметрами, можно добавить ещё записи, например:
Код: Выделить всё
nhdbf.exe "driver={Microsoft dBase driver (*.dbf)};dbq=." "insert into Documents (id,file,name,comment) values (25,?,'Архив-2009.dat','Архив за 2009 год')" C:\Archives\2009\archive.dat
nhdbf.exe "driver={Microsoft dBase driver (*.dbf)};dbq=." "insert into Documents (id,file,name,comment) values (173,?,'Письмо-скан.jpg','Письмо ОСПР-24 от 10.01.2010')" \\server\scans\015.jpg
Код: Выделить всё
nhdbf.exe "driver={Microsoft dBase driver (*.dbf)};dbq=." "update Documents set Document=? where id=25" C:\Archives\2009\archive-2.dat
Для считывания содержимого поля Document из базы данных в файл необходимо подготовить SQL запрос SELECT, чтобы первым столбцом в наборе данных было поле LONGBINARY, а вторым - путь и имя файла. Такое условие сделано для того, чтобы за один запрос можно было считать более одной записи - программа для каждой записи из результирующего набора сохраняет файл, используя значение второго поля как имя файла, например:
Код: Выделить всё
nhdbf.exe "driver={Microsoft dBase driver (*.dbf)};dbq=." "select Document,Name from Documents"
Можно указывать в качестве второго поля и строковую константу, например:
Код: Выделить всё
nhdbf.exe "driver={Microsoft dBase driver (*.dbf)};dbq=." "select Document,'\\server\reports\report-2452.doc' from Documents where id=1"
В приложенном ZIP файле находится пример выполнения записи-чтения файлов с результатом выполнения
кодировка 866