我正在尝试将计算机中的文档放入MySQL数据库的BLOB列中。
我曾尝试将.doc文件转换为byte[]
数组,但它一直将[BLOB - 13 B]
(即system.byte[]
作为字符串)保存到数据库,而不是实际字节。
我不知道哪一部分失败了,因为以下原因,我尝试了多种转换方法并坚持使用这一方法:
int curr = 0;
foreach (string path in documenteFinal)
{
try
{
using (FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read))
using (BinaryReader br = new BinaryReader(fs))
{
byte[] fileData = br.ReadBytes((int)fs.Length);
connection.Open();
MySqlCommand cmd = connection.CreateCommand();
cmd.CommandText = "insert into documents values(null, '" + documenteFinal[curr] + "', '" + fileData + "')";
cmd.ExecuteNonQuery();
connection.Close();
}
}
catch (System.ArgumentNullException)
{ break; }
curr++;
}
答案 0 :(得分:0)
这是因为您需要告诉查询它正在写入Blob字段,而不仅仅是尝试存储ToString()
的{{1}}表示形式。
我还没有测试过,但是您应该能够使用参数化查询来实现您想要做的事情:
fileData
答案 1 :(得分:0)
您应该在二进制数据之前添加0x
并删除单引号,请尝试使用此行代替您的行:
cmd.CommandText = "insert into documents values(null, '" + documenteFinal[curr] + "', 0x" + fileData + ")";
但是我建议尝试使用mysql本机LOAD_FILE
函数的更紧凑的源代码:
foreach (string path in documenteFinal) {
try {
connection.Open();
MySqlCommand cmd = connection.CreateCommand();
cmd.CommandText = $"insert into documents values(null, '{path}', LOAD_FILE('{path}'))";
cmd.ExecuteNonQuery();
connection.Close();
} catch(Exception) { break; }
}