我在.NET中有一个Web服务。有了这个ws,我可以在Base64中接收图像,我通过Entity Framework将它存储到我的数据库中。为此,我将此字符串转换为字节。使用此代码:
static byte[] GetBytes(string str)
{
byte[] bytes = new byte[str.Length * sizeof(char)];
System.Buffer.BlockCopy(str.ToCharArray(), 0, bytes, 0, bytes.Length);
return bytes;
}
现在,我必须从数据库中获取此数据并从ws显示它。所以我有这个代码来检索数据并打印响应:
private IQueryable<ImmaginiSecSocDTO> getSecSocData(int? id)
{
if (id != null)
{
return from u in db_data.CAMERA_SEC_SOC
where u.ID == id
select new ImmaginiSecSocDTO()
{
image = System.Text.Encoding.UTF8.GetString(u.Image),
image_width = u.image_width,
image_height= u.image_height,
type = u.type,
rectangle = new ImmaginiSecSocDTO.Rectangle()
{
rects = from pi in db_data.CAMERA_SEC_SOC_Rectangles
where pi.ID_SecSoc == id
select new ImmaginiSecSocDTO.Rectangle.Rect()
{
height= pi.height,
width = pi.width,
x = pi.x,
y=pi.y
}
}
};
}
return null;
}
但是如果我尝试运行它,我会收到以下错误消息:
&#34; ExceptionType&#34;:&#34; System.NotSupportedException&#34;, &#34; StackTrace&#34;:&#34;在System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.MethodCallTranslator.DefaultTranslator.Translate(ExpressionConverter parent,MethodCallExpression call)\ r \ n在System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.MethodCallTranslator.TypedTranslate中(在System.Data.Entity.Core中的System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.TypedTranslator`1.Translate(ExpressionConverter parent,Expression linq)\ r \ n中的ExpressionConverter parent,MethodCallExpression linq)\ r \ n。 Objects.ELinq.ExpressionConverter.TranslateExpression(Expression linq)\ r \ n
答案 0 :(得分:1)
我对通过SQL Server或实体框架处理byte []数据的任何人表示同情。
幸运的是,这个问题使用了与this answer相同的GetBytes代码,我之所以认识到它是我几年前自己使用它的原因,而且效果很好。
当然有一些关于代码最初编码的机器的一些开放性问题,但是通过事物的声音,这不应该影响你。如果是,那么我建议您尝试使用MemoryStream类,并使用StreamReader进行读取。这将更好地解释空行结尾。