我有一个mysql表,其中有一个Medium Blob字段,我用PDF填充。
PDF存储在字段中,没有问题,并使用以下查询插入:
INSERT INTO PDFHistory ( OrderId, PDFByteArray) VALUES ( 123456, Convert.ToBase64String(pdf.ByteArray))
我无法提取记录并填充byte[]对象。输入不是有效的Base-64字符串,因为它包含一个非base 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());
}
}
任何见解都是赞赏的。
编辑:
mysqlblob记录如下所示(一般情况下)
JVBERi 0xLjQKJ......太多了..... AAAAAAAAAA==
3条答案
按热度按时间egmofgnx1#
我将根据我对MSSQL和ADO.NET的了解来回答这个问题。我认为类似的原则也适用于处理BLOB列类型。如果你想要的Byte[]最初存储在数据库中,那么我认为不需要使用 FromBase64String 进行转换,除非下游应用程序明确要求这样做。
如何从数据库中获取原始字节数组?
MySql参考
https://dev.mysql.com/doc/connector-net/en/connector-net-programming-blob-reading.html
ADO.NET引用
https://learn.microsoft.com/en-us/dotnet/framework/data/adonet/retrieving-binary-datahttps://support.microsoft.com/en-gb/help/309158/how-to-read-and-write-blob-data-by-using-ado-net-with-visual-c-nethttps://learn.microsoft.com/en-us/dotnet/api/system.data.idatarecord.getbytes?view=netframework-4.7.2
1cosmwyk2#
你可以使用一个内存流。
我不会将它转换为base64字符串。只有当您直接在网页(图像)中显示blob内容时,这才有意义。
icnyk63a3#
在VB中的可行代码(NET CORE),尝试在C#中使用相同的逻辑