Нередко встречаются ситуации, когда в базе данных необходимо хранить различные файлы, имеющие нормальное текстовое отображение, а также информацию об этих файлах. Для того, чтобы облегчить добавление файлов в базу данных, просмотр содержимого этих файлов и навигацию по ним, можно разработать простое приложение на ASP.NET.
Примерами таких файлов могут быть обычные текстовые документы, SQL-запросы, файлы с исходным кодом программ и многое другое. База данных MS SQL позволяет хранить такие файлы (как и любые другие), используя тип данных varbinary, который представляет собой бинарные данные переменной длины. Файл, хранящийся в базе данных в формате varbinary имеет следующий вид:
Для того, чтобы иметь возможность прочитать текстовый файл из БД, необходимо перевести его из бинарного вида. Сделать это можно с помощью следующей SQL-команды:
Для того, чтобы облегчить добавление файлов в базу данных, просмотр содержимого этих файлов и навигацию по ним, можно разработать простое приложение на ASP.NET.
Начнем с создания тестовой таблицы в базе данных. Одно из полей должно быть типа varbinary(MAX), а в остальных полях можно хранить любую информацию о файле (например, описание, дату добавлению в базу данных, автора и т.п.). В нашем примере создадим таблицу с названием файла, описанием, датой добавления, автором и размером файла:
Следующим шагом будет написание front-end части нашего веб-приложения. Она будет состоять из нескольких TextBox, предназначенных для ввода информации о добавляемых файлах, элемента FileUpload для выбора файла в диалоговом окне, таблицы GridView, в которой будут отображаться все файлы и многострочного TextBox для просмотра содержимого файла.
Сначала добавим текстбоксы и кнопку «Добавить». Для их удобного расположения, поместим их в элемент Table:
Следующим шагом будет добавление текстбокса для просмотра содержимого. Помимо него нужно добавить кнопку, которая будет очищать этот текстбокс.
Опционально можно предусмотреть возможность поиска по файлам, поэтому добавим элементы, необходимые для реализации поиска. Нам нужен текстбокс для ввода поискового запроса, кнопка поиска и кнопка отмены:
Последним этапом создания front-end части будет добавление таблицы для отображения списка файлов. Она будет построена на основе элемента GridView и будет иметь поле описание с прокруткой, чтобы описание не занимало много места на странице, если оно достаточно обширное. Для этого вместо обычных столбцов BoundField мы будем использовать настраиваемый столбец TemplateField с вложенным в него элементом Label, зададим CSS-стиль (overflow-y: auto) и ограничим максимальную высоту ячейки (max-height: 170px):
Теперь перейдем к back-end части приложения. Для сокращения объема кода в статье, будут выбраны только важные его части. В первую очередь при загрузке страницы необходимо заполнить GridView данными из БД. Для этого воспользуемся стандартным простым способом. SQL Запрос, формирующий выборку для объекта SqlDataAdapter самый простой: «select * from dbo.[table] order by id». Он подается на вход данного метода:
Для добавления записи в базу данных необходимо использовать следующий код, где query — обычный insert-запрос с подстановкой переменных:
Метод UploadFileToDB(), отвечающий за загрузку файла с базу данных, берет файл из элемента FileUpload, переводит его из входного потока в массив байтов с помощью BinaryReader и возвращает этот массив. Метод выглядит следующим образом:
Для того, чтобы вывести на интерфейс приложения текст файла, хранящегося в базе данных, необходимо перевести его обратно в читаемый вид. Для этого воспользуемся SQL-запросом, который получит бинарное представление файла из таблицы, а затем переведем в текст и отобразим. Открытие файла будет происходить при нажатии кнопки, расположенной в таблице рядом с файлом. Текст будет выводиться в ранее созданное окно.
Поиск среди добавленных файлов будет работать на основе простого SQL-запроса (select * from [table] where [description] like ‘%{0}%’or [name] like ‘%{0}%’… ) и будет искать информацию по всем свойствам файла, которые мы указали при добавлении. Метод поиска выглядит следующим образом:
Помимо всего этого, можно реализовать не столь нужные, но удобные вещи, которые еще больше облегчат работу или исключат некоторые возможные ошибки в работе веб-приложения. Среди них:
Код данных фишек представлен ниже в порядке их упоминания (Методы 1-4 вызываются каждый раз при нажатии кнопки «Добавить» и связаны между собой вызовами):
В результате мы получили вот такое удобное и простое приложение: