我试图将图像存储在sql server数据库中。我在存储数据的Image表中有一列,并且类型为varbinary(max)。我使用NHibernate来访问数据库。将图像存储在数据库中会产生部分图像
将图像加载到代码中并将其转换为缓冲区数组可以正常工作。当我将图像存储在数据库中时,无论我放入30kb以上的图像大小如何,都只保留一部分图像。
我检查了数据库中存储的数据,并且所有图像都存储了相同数量的数据,所以我的猜测是某些内容限制了可以保存在列中的字节[]的大小。
当我将数据从数据库中拉出并在屏幕上显示图像时,它仅显示图像的顶部。
什么可能是错的?
更新: 我检查了varbinary(max)列中数据的大小,所有数据项都是8000bytes。
下面的代码:
创建表:
IF NOT EXISTS(SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME LIKE 'Image')
CREATE TABLE [Image]
(
[ImageId] INT IDENTITY(1,1) NOT NULL,
[FileName] NVARCHAR(MAX) NOT NULL,
[ImageData] VARBINARY(MAX) NOT NULL,
[Caption] NVARCHAR(MAX) NULL,
CONSTRAINT PK_ImageId PRIMARY KEY CLUSTERED (ImageId ASC)
ON [PRIMARY]
)
流利的映射:
public ImageMap()
{
Id(x=>x.Id,"ImageId").GeneratedBy.Identity();
Map(x => x.Caption);
Map(x => x.FileName);
Map(x => x.Data).Column("ImageData");
HasMany(x => x.ArticleImages).KeyColumn("ImageId").Inverse();
HasOne(x => x.Thumbnail).PropertyRef(r=>r.Image).Cascade.All();
}
NHibernate的实体类:
using System.Collections.Generic;
public class Image : BaseEntity
{
/// <summary>
/// Image's name
/// </summary>
public virtual string FileName { get; set; }
/// <summary>
/// Image's Caption
/// </summary>
public virtual string Caption { get; set; }
/// <summary>
/// Binary data for the image
/// </summary>
public virtual byte[] Data { get; set; }
/// <summary>
/// Link to article
/// </summary>
public virtual IEnumerable<ArticleImage> ArticleImages { get; set; }
/// <summary>
/// The thumbnail for the image
/// </summary>
public virtual ImageThumbnail Thumbnail { get; set; }
}
你想要一个文本形式或实际代码的答案?如果你想要的代码,我建议你也发布一些我们也... – Niklas 2011-04-18 17:59:19
修复它。 将图像数据映射更改为 Map(x => x.Data).Column(“ImageData”)。CustomSqlType(“VARBINARY(MAX)”)。Length(160000); – VARAK 2011-04-18 18:41:18