Как вставить файл (PDF) в varbinary столбец SQL Server, а затем извлечь его?

StackOverflow https://stackoverflow.com/questions/443635

  •  22-07-2019
  •  | 
  •  

Вопрос

Я собираюсь взять результаты прогона отчета (PDF-файл из Crystal Reports), сериализовать его, вставить в поле varbinary, а затем позже иметь возможность десериализовать и представить его обратно пользователю.

Сейчас мне нужно просто старую ADO .NET (SqlClient, SqlCommand и т. д.)

Есть ли подводные камни в этом? Каков основной синтаксис для достижения этой цели, учитывая тот факт, что я знаю путь на локальном компьютере, на котором в данный момент сохранен файл PDF?

Это было полезно?

Решение

РЕДАКТИРОВАТЬ . Это можно увидеть в документации MSDN. это изображение будет удалено . Лучше использовать VARBINARY (MAX). (Эй, я этого не знал).

МОЙ СТАРЫЙ ОТВЕТ: VARBINARY имеет ограничение в 8 КБ. Может быть слишком маленьким для хранения PDF. Вам лучше использовать тип данных IMAGE.

Используйте параметры для вставки / выбора ваших данных с помощью SqlCommand, и вы можете использовать простой SQL, как любое обычное поле.

Данные, которые вы передаете в поле изображения, представляют собой массив байтов.

Редактировать 2: Поскольку вы используете C #, вы должны получить данные с помощью DataReader. Чтобы создать DataReader, используйте флаг SequentialAccess на SqlCommand.ExecuteReader , чтобы данные не читались в память слишком рано.

Другие советы

Я бы вообще не использовал параметр byte [] для IDbCommand . Что если ваш PDF размером 100 Мб? Насколько я знаю, это получило бы все эти 100 Мб из вашей базы данных (нуждающихся в таком количестве памяти на вашем сервере) перед отправкой результата запрашивающему браузеру. Теперь подумайте о том, чтобы получать несколько одновременных запросов для разных PDF-файлов примерно такого размера ... в секунду ... Это не очень масштабируется.

Чтобы найти возможное решение, ознакомьтесь с " Blob + Stream = BlobStream " ; , статья, которую я написал для .NET Magazine здесь, в Нидерландах, пару лет назад. Этот метод использует команды SQL Server для доступа к частям BLOB из потока производный класс.

Статья написана на голландском языке, но пример кода , который идет с ним, должен быть достаточным для начала работы. Кроме того, Питер Де Йонге, кажется, написал статью о CodeProject , которая расширяется моя статья немного, обобщая это больше, чем просто столбцы image в SQL Server. Эта статья на английском языке.

Надеюсь, это поможет вам решить вашу проблему.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top