我正在使用SqlDataReader,我正在尝试从我从Access文件转换的表中读取,并且在SQL Server 2008中。
数据类型现在是varbinary(max)。
我如何转换它,所以我可以将它作为System.Drawing.Image?
这是一个Windows MetaFile,我想将其转换为PNG或GIF并将其保存到文件系统。
看起来这不正确,因为我收到一个无法转换为Image的错误。
System.Drawing.Image LocationImage = sdr.GetSqlBinary(2)
谢谢。
答案 0 :(得分:1)
使用SqlBytes。使用Image.FromStream加载SqlBytes.Stream中的图片。使用阅读器上的CommandBehavior.SequentialAccess加载大尺寸图片:
using (SqlDataReader sdr=cmd.ExecuteReader(CommandBehavior.SequentialAccess))
{
...
System.Data.SqlTypes.SqlBytes imageBytes = srd.GetSqBytes(2);
System.Drawing.Image locationImage = Image.FromStream(imageBytes.Stream);
}
将其保存为PNG / GIF:
SqlCommand cmd = new SqlCommand("update table set image=@image where ...")
MemoryStream streamOutput = new MemoryStream();
image.Save(streamOutput, ImageFormat.Png);
SqlBytes imageBytes = new SqlBytes(streamOutput);
cmd.Parameters.AddWithValue("@image", imageBytes);
cmd.ExecuteNonQuery()
<强>更新强>
我不确定Image.FromStream是否可以加载WMF格式。它可以加载EMF afaik,但我不确定WMF。也许通过Metafile(Stream)构造函数路由调用是可行的,我不是一个图形专家。