【问题标题】:Storing PDF files in SQL server database在 SQL Server 数据库中存储 PDF 文件
【发布时间】:2018-12-28 06:13:21
【问题描述】:

我正在尝试将 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");

【问题讨论】:

  • 那不是 C++,而是一种叫做 C++/CLI 的方言。
  • 你有一个 SQL 注入漏洞。请使用SqlCommand的Parameters属性或相关技术来避免。

标签: c++-cli


【解决方案1】:

问题在于您将缓冲区连接到 SQL 命令的位置。

+ Mybuffer +");"

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多