C# rdlc查找函数返回字节数组#错误

C# rdlc查找函数返回字节数组#错误,c#,bytearray,rdlc,lookup,C#,Bytearray,Rdlc,Lookup,我想在rdlc报告的页脚中动态地从数据库加载一组数据绑定图像。 我有一个从数据库填充的ProductDataSource: Id of integer ProductImage of byte[] 并创建适当的节点并将其添加到页脚节点,如: valueExpression = "=Lookup(" + ProductId +", Fields!Id.Value, Fields.ProductImage.Value, \"Products\")" imageNode("Value").Val

我想在rdlc报告的页脚中动态地从数据库加载一组数据绑定图像。 我有一个从数据库填充的
ProductDataSource

Id of integer 
ProductImage of byte[]
并创建适当的
节点并将其添加到页脚节点,如:

valueExpression = "=Lookup(" + ProductId +", Fields!Id.Value, Fields.ProductImage.Value, \"Products\")"

imageNode("Value").Value = valueExpression ;
imageNode("MIMEType").Value ="image/png"; //for exp. all images have .png extension

footerNode.Add(imageNode);
但图像不会加载,当我将查找表达式放入文本框时,只会得到
#Error

我从接受
Variant或Binary
的文档中找到,并将Variant作为result\u表达式,因此将
Lookup
替换为
First
,效果良好:

valueExpression = First(Fields.ProductImage.Value, "Products")
还要查找字段。ProductImage.Value(0)获取数组的第一个字节

Lookup(Fileds!ProductId.Value, Fields!Id.Value, Fields.ProductImage.Value(0), "Products")
为什么查找不能返回字节数组,或者换句话说,Variant是(对象的)动态数据类型,那么为什么它不能将字节数组转换为Variant呢

最后,在尝试失败之后,我解决了这个问题:将字节数组转换为Base64String,反之亦然,通过
convert.ToBase64String()
convert.FromBase64String()


但这些转换会降低报表呈现速度。您是否建议将动态数据绑定图像添加到rdlc的更好方法?

永远,永远,永远不要将二进制数据转换为字符串,否则会出错。始终作为字节[]工作。使用Encoding.UTF8将数据从流获取到字节[]。Tnx@jdweng我同意您的看法,转换为字符串并不好,但我的问题是从lookup()获取字节[]。你是说将字节[]转换为UTF8?你不能将字节[]转换为UTF8。我的意思是:StreamReader stream=newstreamreader(“filename”,Encoding.UTF8);永远不要,永远不要,永远不要把二进制数据转换成字符串,那样会搞砸的。始终作为字节[]工作。使用Encoding.UTF8将数据从流获取到字节[]。Tnx@jdweng我同意您的看法,转换为字符串并不好,但我的问题是从lookup()获取字节[]。你是说将字节[]转换为UTF8?你不能将字节[]转换为UTF8。我的意思是:StreamReader stream=newstreamreader(“filename”,Encoding.UTF8);
    var valueExpression = "=Convert.ToBase64String(
      Lookup(" + ProductId + ",
        Fields!Id.Value,
        Convert.FromBase64String(Fields!Content.Value),
        \"TProjExeSettings\")
    )";