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

问题描述 投票:1回答:2

我有一个带有中等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 ==

c# mysql blob
2个回答
1
投票

我将从我对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


0
投票

您可以使用内存流。

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

我不会将它转换为base64字符串。只有在网页(图像)中直接显示blob内容时,这才有意义。

© www.soinside.com 2019 - 2024. All rights reserved.