C# 使用Entity Framework 6从SQL Server保存和检索图像(二进制)
我正在尝试将位图图像保存到数据库C# 使用Entity Framework 6从SQL Server保存和检索图像(二进制),c#,entity-framework,bitmap,binary,C#,Entity Framework,Bitmap,Binary,我正在尝试将位图图像保存到数据库 Bitmap map = new Bitmap(pictureBoxMetroMap.Size.Width, pictureBoxMetroMap.Size.Height); 我用datatypebinary在数据库中创建了一个列imgcontent,但我的问题是如何将这个位图(map)转换为二进制数据 如何从数据库中检索数据 我在谷歌上搜索了一下,发现了类似这样的东西,但没用: byte[] arr; ImageConverter converter = n
Bitmap map = new Bitmap(pictureBoxMetroMap.Size.Width, pictureBoxMetroMap.Size.Height);
我用datatypebinary
在数据库中创建了一个列imgcontent
,但我的问题是如何将这个位图(map)转换为二进制数据
如何从数据库中检索数据
我在谷歌上搜索了一下,发现了类似这样的东西,但没用:
byte[] arr;
ImageConverter converter = new ImageConverter();
arr = (byte[])converter.ConvertTo(map, typeof(byte[]));
将图像转换为字节[]
,并将其存储在数据库中
将此列添加到模型中:
public byte[] Content { get; set; }
然后将图像转换为字节数组,并像存储任何其他数据一样存储:
public byte[] ImageToByteArray(System.Drawing.Image imageIn)
{
using(var ms = new MemoryStream())
{
imageIn.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
return ms.ToArray();
}
}
public Image ByteArrayToImage(byte[] byteArrayIn)
{
using(var ms = new MemoryStream(byteArrayIn))
{
var returnImage = Image.FromStream(ms);
return returnImage;
}
}
资料来源:
当您想要取回图像时,请从数据库中获取字节数组,并使用ByteArrayToImage
对图像执行所需操作
当字节[]
变大时,这将停止工作。它适用于100Mb以下的文件@JensB谢谢你,但你没有使用EF!!我说的对吗?如果我想保存一个超过100MB的文件怎么办?如何调整代码?@bangbang然后我个人会考虑将文件存储在磁盘上,并将文件的路径保存在数据库中。但是,如果仍要将其保存在DB中,请使用varbinary(max)。限制2GB。@AdeelShekhani对我来说,问题不是数据库无法存储它,而是EF将超时或需要很长时间才能将其发送到数据库。
var image = new ImageEntity()
{
Content = ImageToByteArray(image)
};
_context.Images.Add(image);
_context.SaveChanges();