C#文档的二进制转换失败

时间:2018-12-08 13:57:11

标签: c# binary byte blob

我正在尝试将计算机中的文档放入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++;
}

2 个答案:

答案 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; }
  }