将varbinary转换为image
本文关键字:image 转换 varbinary | 更新日期: 2023-09-27 18:15:53
我设法将图像转换为varbinary并将其存储在我的数据库中。我一直在尝试将varbinary转换为Image,但我在这里遇到了一些麻烦。
首先,我从我的服务中的数据库中获取二进制文件。
public Binary getAfbeelding(int id)
{
var query = (from p in dc.Afbeeldings
where p.id == id
select p.source).Single();
Binary source = query;
return source;
}
然后我尝试将varbinary转换为图像,使用在StackOverflow上找到的代码:
public static string convertToImage(Binary source)
{
byte[] b = source.ToArray();
MemoryStream ms = new MemoryStream(b);
Image img = Image.FromStream(ms);
return img.Source.ToString();
}
在呼叫new MemoryStream
之前我遇到了麻烦:
OndernemersAward.EditAfbeeldingServiceReference。Binary'不包含'ToArray'的定义,也没有扩展方法'ToArray'接受类型的第一个参数"OndernemersAward.EditAfbeeldingServiceReference。可以找到二进制文件(您是否缺少using指令或汇编引用?)
由于一些奇怪的原因,我不能使用"正常"二进制,它总是告诉我使用OndernemersAward.EditAfbeeldingServiceReference.Binary
,这是我的ServiceReference,如你所见。
如何解决这个问题?
1)在项目中添加System.Data.Linq.dll的引用
2)然后试试这个:
public static Image ConvertToImage(System.Data.Linq.Binary iBinary)
{
var arrayBinary = iBinary.ToArray();
Image rImage = null;
using (MemoryStream ms = new MemoryStream(arrayBinary))
{
rImage = Image.FromStream(ms);
}
return rImage;
}
这里发生的事情是编译器认为Binary
是您的命名空间OndernemersAward.EditAfbeeldingServiceReference
中的类。
您在convertToImage
中的代码期望名为source
的参数类型为System.Data.Linq.Binary
。您在StackOverflow上找到的代码假设这是数据类型。
如果您在自己的命名空间中有一个类,请将其重命名为其他名称以避免重复命名。如果这不是一个好的选择,那么考虑在使用2个Binary
类时在代码中显式地使用完全限定的名称空间。
您可能在ondernemerward中创建了二进制类。EditAfbeeldingServiceReference名称空间。
添加System.Data.Linq.dll
库到您的引用。然后写:
using System.Data.Linq;
....
public static Image ConvertToImage(Binary iBinary)
{
var arrayBinary = iBinary.ToArray();
Image rImage = null;
using (MemoryStream ms = new MemoryStream(arrayBinary))
{
rImage = Image.FromStream(ms);
}
return rImage;
}