J'essaie de stocker des images dans une base de données sql server. J'ai une colonne dans une table Image qui stocke les données et qui est de type varbinary(max). J'utilise NHibernate pour accéder à la base de données.
Le chargement de l'image dans le code et sa conversion en un tableau tampon fonctionnent bien. Lorsque je stocke l'image dans la base de données, quelle que soit la taille de l'image supérieure à 30 Ko que je mets, seule une partie de l'image est enregistrée.
J'ai vérifié les données stockées dans la base de données et toutes les images ont la même quantité de données stockées. Je pense donc que quelque chose limite la taille de l'octet[] qui peut être contenu dans la colonne.
Lorsque je sors les données de la base de données et que j'affiche l'image à l'écran, seule la partie supérieure de l'image apparaît.
Qu'est-ce qui pourrait ne pas aller ?
Mise à jour : J'ai vérifié la taille des données dans la colonne varbinary(max) et toutes les entrées de données sont de 8000bytes.
Voici le code :
Création du tableau :
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]
)
Cartographie fluide :
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();
}
Classe d'entité 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; }
}