Хранение файлов PDF в базе данных сервера SQL - PullRequest
0 голосов
/ 27 декабря 2018

Я пытаюсь сохранить файл PDF в моей таблице базы данных, есть ли какой-нибудь правильный способ сделать это.Я работаю с C ++ / CLI.

Я попробовал этот код ниже, но я получаю System.byte [] вместо фактического значения

    FileStream^ fs = gcnew FileStream("E:\\test.pdf",FileMode::Open,FileAccess::Read);
    BinaryReader^ br=gcnew BinaryReader(fs);
cli::array<System::Byte>^ Mybuffer=gcnew cli::array<System::Byte>(fs->Length);
Mybuffer =br->ReadBytes(Convert::ToInt32(fs->Length));

SqlCommand^ cmd = gcnew SqlCommand
    ("Insert Into Employees(empName,branchGuid,cvFile) values ('" + textBox1->Text + "',(select branchGuid from Branches where branchName='" + branchesComboBox->SelectedValue->ToString() + "')," + Mybuffer +");", conn);
      SqlDataAdapter^ sda = gcnew SqlDataAdapter(cmd);
      DataSet^ ds = gcnew DataSet();
      sda->Fill(ds, "insert");

1 Ответ

0 голосов
/ 28 декабря 2018

Проблема в том, где вы объединяете буфер в команду SQL.

+ Mybuffer +");"

Mybuffer относится к типу array<Byte>^.Когда вы делаете конкатенацию строк с чем-то отличным от строки, она вызывает ToString().Класс массива .Net не выводит содержимое массива при вызове ToString, он просто выполняет поведение по умолчанию, которое заключается в выводе имени класса (в формате C #, поэтому [] вместо array<>).

Вы еще не сказали, как определяется поле cvFile таблицы Employees.Вам нужно будет либо выполнить итерацию по байтовому массиву и создать инструкцию SQL со значением всех байтов, либо вам может понадобиться использовать другой API для вставки данных.Если это тип BLOB, посмотрите этот ответ, там есть много хороших идей: Как вставить тип данных BLOB

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...