在SQL Server数据库中存储PDF文件

时间:2018-12-27 15:37:27

标签: c++-cli

我正在尝试将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 :(得分:0)

问题在于您要将缓冲区连接到SQL命令中。

+ Mybuffer +");"

Mybuffer的类型为array<Byte>^。当您对字符串以外的其他字符串进行字符串连接时,它将调用ToString()。 .Net数组类在调用ToString时不会输出数组内容,它只是执行默认行为,即输出类名(以C#格式,因此[]而不是array<>) 。

您还没有说过cvFile表的Employees字段是如何定义的。您将需要遍历字节数组并使用所有字节的值创建SQL语句,或者您可能需要使用其他一些API来插入数据。如果是BLOB类型,请参见以下答案,那里有很多好的概念:How to insert BLOB datatype