c#Beginnerrrr Ответов: 2

Как сохранить строку blob-объекта в SQL?


У меня есть большой двоичный объект, в котором есть содержимое файла excel. допустим, мой blob-объект похож на "0hsijc02dhsic", который имеет содержимое файла excel. Я введу большой двоичный объект в текстовое поле и отправлю форму...Теперь мой большой двоичный объект должен быть сохранен как файл XLSX...как мне реализовать это в c#?

Что я уже пробовал:

Я передал каплю в виде текстового поля в форме и отправил ее.

Maciej Los

Я сомневаюсь, что "0hsijc02dhsic" - это содержимое файла excel...

c#Beginnerrrr

Я просто использовал это в качестве примера, и это действительно не так

2 Ответов

Рейтинг:
2

OriginalGriff

Цитата:
Я передал каплю в виде текстового поля в форме и отправил ее.

Не.
Существует два типа файлов Excel: XLS и XLSX - и ни один из них не основан на тексте. Первый-это проприетарный двоичный формат, второй - набор заархивированных XML-файлов. Попытка втиснуть любую форму в строку приведет к повреждению данных и сделает файл бесполезным.

Вместо этого считайте данные Excel непосредственно в массив байтов и отправляйте их в SQL с помощью параметризованного запроса.
Это та же проблема с данными изображений и тем же решением: Почему я получаю "параметр не является допустимым." исключение, когда я читаю изображение из своей базы данных?[^] показывает параметризованное решение.


c#Beginnerrrr

Я не могу читать excel напрямую. Клиент будет отправлять файл excel с данными. Эти данные будут храниться в виде большого двоичного объекта в SQL. Мне нужно приложение, в котором я просто скопирую-вставлю blob-объект из SQL и увижу исходные данные в нем. Я все еще могу прочитать blob-объект с помощью stream, но проблема здесь в том, что данные хранятся на другом сервере, и я не могу получить к ним прямой доступ(предоставляется только значение blob-объекта).

OriginalGriff

Если он хранится в большом двоичном объекте в SQL , то он уже хранится в виде двоичных данных. Вы не можете просто "просмотреть blob - объект как текст" и ожидать увидеть что-нибудь полезное-как я уже сказал, XLSX-файлы-это коллекция сжатых файлов, поэтому вам придется распаковать Zip-файл, а затем посмотреть на данные в каждом файле. Даже тогда вы, вероятно, не увидите много того, что вы узнаете или можете использовать: вам нужно использовать программу чтения Excel, чтобы "декодировать" файл / дату в DataTable / DataReader или что-то подобное.

Dave Kreskowiak

Вы не получаете файл Excel из текстового поля. Это уж точно.

Я не знаю, что вы считаете "файлом Excel", но если вы получаете содержимое из текстового поля, то это уже не файл Excel.

Если вам нужен файл, то пользователь должен будет загрузить сам файл, а не что-то вставленное в текстовое поле.

Рейтинг:
1

Maciej Los

Не важно, какие данные вы храните в поле blob-объекта. Это может быть файл *.pdf, *.xls или файл изображения и т. д. Способ записи/чтения данных остается тем же самым. Вы должны "преобразовать" исходные данные в поток, чтобы иметь возможность сохранить их в базе данных. Вы должны "преобразовать" поток (blob) в исходные данные, чтобы иметь возможность его прочитать. Вот и все!