我正在尝试将图像存储在sql server数据库中。我在Image表中有一个存储数据的列,其类型为varbinary(max)。我正在使用NHibernate来访问数据库。
将图像加载到代码中并将其转换为缓冲区数组可以正常工作。当我将图像存储在数据库中时,无论我放入30kb以上的大小图像,都只保存部分图像。
我检查了存储在数据库中的数据,并且所有图像都存储了相同数量的数据,因此我的猜测是某些内容限制了可以保留在列中的byte []的大小。
当我从数据库中提取数据并在屏幕上显示图像时,它只显示图像的顶部。
可能出现什么问题?
更新 我检查了varbinary(max)列中数据的大小,所有数据条目都是8000字节。
以下是代码:
表格创建:
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; }
}
答案 0 :(得分:3)
修正了它。
将imagedata映射更改为
Map(x =&gt; x.Data).Column(“ImageData”)。CustomSqlType(“VARBINARY(MAX)”)。长度(160000);
由于某种原因,数据通过nhibernate映射被截断为8000字节。添加此修复它。