如何将MySQL blob加载到C#字节数组中

时间:2014-02-19 04:36:34

标签: c# mysql blob

我有一个带有中等Blob字段的mysql表,我填写了PDF。

PDF在没有问题的情况下存储在字段中,并使用以下查询插入:

INSERT INTO PDFHistory ( OrderId, PDFByteArray) VALUES ( 123456, Convert.ToBase64String(pdf.ByteArray))

我无法拉取记录并填充byte []对象。我收到错误“输入不是有效的Base-64字符串,因为它包含非基本64字符,两个以上的填充字符,或填充字符中的非法字符。”

dbManager.Open();
using (DataTable dt = dbManager.ExecuteDataTable(CommandType.Text, "SELECT * FROM PDFHistory WHERE OrderId = {0} ORDER BY Timestamp DESC LIMIT 1" ))
{
   if (dt.Rows.Count > 0)
   {
       byte[] PDFByteArray = Convert.FromBase64String(dt.Rows[0]["PDFByteArray"].ToString());
   }
}

感谢任何见解。

编辑:

mysql blob记录看起来像这样(通常)

JVBERi0xLjQKJ .....发布太多了...... AAAAAAAAAA ==

2 个答案:

答案 0 :(得分:0)

您可以为此使用内存流。

MemoryStream ms = new MemoryStream(PdfBlob);
                byte[] newPdf = ms.ToArray();
                ms.Close();

我不会在base64字符串之间来回转换。仅当您直接在网页(图像)中显示blob内容时,这才有意义。

答案 1 :(得分:0)

根据我对MSSQL和ADO.NET的了解,我将回答这个问题。我认为类似的原则适用于处理BLOB列类型。如果您想要最初存储在数据库中的Byte [],那么除非下游应用程序明确要求,否则我认为不需要使用 FromBase64String 进行转换。

如何从数据库中获取原始字节数组?

//Assuming you have already retrieve an instance to the Datatable
byte[] raw=(byte[])dt.Rows[0]["PDFByteArray"]

MySql参考

https://dev.mysql.com/doc/connector-net/en/connector-net-programming-blob-reading.html

ADO.NET参考

https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/retrieving-binary-data https://support.microsoft.com/en-gb/help/309158/how-to-read-and-write-blob-data-by-using-ado-net-with-visual-c-net https://docs.microsoft.com/en-us/dotnet/api/system.data.idatarecord.getbytes?view=netframework-4.7.2