【发布时间】:2019-03-14 20:05:02
【问题描述】:
我想通过这个过程将图像保存在VARBINARY(max)类型的数据库中:
ALTER proc [dbo].[User_Create]
(@BirthCertificateImage varbinary(max),
@BookletImage varbinary(max),
@GreenCardImage varbinary(max))
as
insert into [User]
(BirthCertificateImage,BookletImage,GreenCardImage)
values
(@BirthCertificateImage,@BookletImage,@GreenCardImage)
这是我如何使用 SQL 过程提取字段的方法
ALTER proc [dbo].[User_GetById]
(@UserId int)
as
select * from [User]
where
Id = @UserId
这就是我在 EF 中使用上述过程的方式
var user = await db.Database.SqlQuery<UserModel>("User_GetById @UserId"
, new SqlParameter("UserId",id)).SingleOrDefaultAsync();
这就是我如何在 PictureBox 中显示二进制图像
var birthCertificateMs = new
MemoryStream(response.Entity.BirthCertificateImage);
birthCertificatePictureBox.Image = Image.FromStream(birthCertificateMs);
birthCertificateMs.Close();
另外,我的属性的维护类型是byte[]
那么我该如何管理呢?如果那是空的,我不会有麻烦吗?
考虑一下,当输入不为空时它可以正常工作
【问题讨论】:
-
您是否尝试使用空值测试您的代码?然后会发生什么?
-
您可以将
response.Entity.BirthCertificateImage ?? Array.Empty<byte>()作为 MemoryStream 构造函数的参数。 -
@Steve MemorySteam 构造函数会抛出 ArgumentNullException。
-
为什么不在开始显示操作之前检查它是否不为空?
-
@Steve 是的,它不能正常工作
标签: c# arrays sql-server entity-framework stored-procedures