web-dev-qa-db-fra.com

Comment enregistrer une image dans une base de données à l'aide de C #

Je veux enregistrer l'image utilisateur dans une base de données en C #. Comment je fais ça?

28
r.r

Vous devrez sérialiser l'image au format binaire qui peut être stocké dans une colonne SQL BLOB. En supposant que vous utilisez SQL Server, voici un bon article sur le sujet:

http://www.eggheadcafe.com/articles/20020929.asp

4
Dave Swersky

Essayez cette méthode. Cela devrait fonctionner lorsque le champ lorsque vous souhaitez stocker l'image est de type byte. Il crée d'abord byte[] pour l'image. Il l'enregistre ensuite dans la base de données à l'aide de IDataParameter de type binary.

using System.Drawing;
using System.Drawing.Imaging;
using System.Data;

    public static void PerisitImage(string path, IDbConnection connection)
    {
        using (var command = connection.CreateCommand ())
        {
            Image img = Image.FromFile (path);
            MemoryStream tmpStream = new MemoryStream();
            img.Save (tmpStream, ImageFormat.Png); // change to other format
            tmpStream.Seek (0, SeekOrigin.Begin);
            byte[] imgBytes = new byte[MAX_IMG_SIZE];
            tmpStream.Read (imgBytes, 0, MAX_IMG_SIZE);

            command.CommandText = "INSERT INTO images(payload) VALUES (:payload)";
            IDataParameter par = command.CreateParameter();
            par.ParameterName = "payload";
            par.DbType = DbType.Binary;
            par.Value = imgBytes;
            command.Parameters.Add(par);
            command.ExecuteNonQuery ();
        }
    }
23
jethro

Vous voudrez convertir l'image en un byte[] En C #, puis vous aurez la colonne de base de données comme varbinary(MAX)

Après cela, c'est comme enregistrer tout autre type de données.

6
Mike M.

Il s'agit d'une méthode qui utilise un contrôle FileUpload dans asp.net:

byte[] buffer = new byte[fu.FileContent.Length];
Stream s = fu.FileContent;
s.Read(buffer, 0, buffer.Length);
//Then save 'buffer' to the varbinary column in your db where you want to store the image.
6
Abe Miessler

vous pouvez enregistrer le chemin de l'image dans la base de données ou enregistrer l'image elle-même en tant que BLOB (binaire - tableau d'octets) .. cela dépend du cas que vous avez obtenu, si votre application est une application Web, puis enregistrez le chemin du l'image est bien meilleure.Mais si vous avez une application cliente qui se connecte à une base de données centralisée, vous devez l'enregistrer au format binaire.

2
Khaled

Ma préférence personnelle n'est pas d'enregistrer les images dans une base de données en tant que telle. Enregistrez l'image quelque part dans le système de fichiers et enregistrez une référence dans la base de données.

1
Jaydee

Étant donné que vous utilisez SQL, je vous déconseille d'utiliser adhoc ("écriture d'instructions dans des chaînes"), d'autant plus que vous chargez une image.

ADO.NET peut faire tout le travail acharné de mappage, d'échappement, etc. pour vous.

Créez une procédure stockée ou utilisez SqlParameter pour effectuer la liaison.

Comme le disent les autres affiches, utilisez VARBINARY (MAX) comme type de stockage - L'IMAGE est obsolète.

1
StuartLC