我正在尝试将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");
答案 0 :(得分:0)
问题在于您要将缓冲区连接到SQL命令中。
+ Mybuffer +");"
Mybuffer
的类型为array<Byte>^
。当您对字符串以外的其他字符串进行字符串连接时,它将调用ToString()
。 .Net数组类在调用ToString时不会输出数组内容,它只是执行默认行为,即输出类名(以C#格式,因此[]
而不是array<>
) 。
您还没有说过cvFile
表的Employees
字段是如何定义的。您将需要遍历字节数组并使用所有字节的值创建SQL语句,或者您可能需要使用其他一些API来插入数据。如果是BLOB类型,请参见以下答案,那里有很多好的概念:How to insert BLOB datatype