Enregistrer et Charger l'image SQLite C#

Je suis en train de charger et d'enregistrer des images avec SQLite avec une application sur WinForm avec CF. J'ai trouvé un moyen pour enregistrer une image dans la base mais je ne sais pas si c'est juste parce que je ne pouvais pas trouver un moyen de charger l'image stockée dans la base de données.

J'ai un code pour convertir mon image en Base64:

public void ImageToBase64(Image image, System.Drawing.Imaging.ImageFormat format){
        using (MemoryStream ms = new MemoryStream()){
            //Convert Image to byte[]
            image.Save(ms, format);
            byte[] imageBytes = ms.ToArray();

            //Convert byte[] to Base64 String
            string base64String = Convert.ToBase64String(imageBytes);
            SaveImage(base64String);
        }
    }

C'est mon code pour enregistrer l'image dans la base:

void SaveImage(string pic){
        string query = "insert into Table (Photo) values (@pic);"; 
        string conString = @" Data Source = \Program Files\Users.s3db ";            
        SQLiteConnection con = new SQLiteConnection(conString); 
        SQLiteCommand cmd = new SQLiteCommand(query, con);
        cmd.Parameters.Add("@pic",DbType.String);
        con.Open(); 
        try{
            cmd.ExecuteNonQuery();
        }
        catch (Exception exc1){
            MessageBox.Show(exc1.Message);
        }
        con.Close();
    }

J'ai un code pour faire le contraire de ImageToBase64 mais d'abord, j'ai besoin de charger l'image à partir de la db. Toute idée?

MODIFIER je suis en train d'utiliser le blob pour enregistrer l'image maintenant que Charlie a suggéré. J'ai essayé ce code:

Image photo = new Bitmap(@"\Photos\Image20120601_1.jpeg");
SaveImage(photo);

void SaveImage(Image pic){
string conString = @" Data Source = \Program Files\Users.s3db ";            
SQLiteConnection con = new SQLiteConnection(conString);
SQLiteCommand cmd = con.CreateCommand();
cmd.CommandText = String.Format("INSERT INTO Table (Photo) VALUES (@0);");
SQLiteParameter param = new SQLiteParameter("@0", System.Data.DbType.Binary);
param.Value = pic;
cmd.Parameters.Add(param);
con.Open(); 
try{
    cmd.ExecuteNonQuery();
}
catch (Exception exc1){
    MessageBox.Show(exc1.Message);
}
con.Close();}

Mais quand je ExcecuteNonQuery() attraper une erreur de InvalidCastException.

Toute suggérer?

SOLUTION Ce code d'enregistrer une image dans la base de données et puis il charge l'image pour l'afficher dans une pictureBox:

namespace ImagenSQLite
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
Image photo = new Bitmap(@"\Photos\Image20120601_1.jpeg");
byte[] pic = ImageToByte(photo, System.Drawing.Imaging.ImageFormat.Jpeg);
SaveImage(pic);
LoadImage();
}
public byte[] ImageToByte(Image image, System.Drawing.Imaging.ImageFormat format){
using (MemoryStream ms = new MemoryStream())
{
//Convert Image to byte[]
image.Save(ms, format);
byte[] imageBytes = ms.ToArray();
return imageBytes;
}
}
//public Image Base64ToImage(string base64String)
public Image ByteToImage(byte[] imageBytes)
{
//Convert byte[] to Image
MemoryStream ms = new MemoryStream(imageBytes, 0, imageBytes.Length);
ms.Write(imageBytes, 0, imageBytes.Length);
Image image = new Bitmap(ms);
return image;
}
/***************** SQLite **************************/
void SaveImage(byte[] imagen){
string conStringDatosUsuarios = @" Data Source = \Program Files\GPS___CAM\Data\DatosUsuarios.s3db ";            
SQLiteConnection con = new SQLiteConnection(conStringDatosUsuarios); 
SQLiteCommand cmd = con.CreateCommand();
cmd.CommandText = String.Format("INSERT INTO Empleados (Foto) VALUES (@0);");
SQLiteParameter param = new SQLiteParameter("@0", System.Data.DbType.Binary);
param.Value = imagen;
cmd.Parameters.Add(param);
con.Open();
try
{
cmd.ExecuteNonQuery();
}
catch (Exception exc1)
{
MessageBox.Show(exc1.Message);
}
con.Close();
}
void LoadImage(){
string query = "SELECT Photo FROM Table WHERE ID='5';";
string conString = @" Data Source = \Program Files\Users.s3db ";
SQLiteConnection con = new SQLiteConnection(conString); 
SQLiteCommand cmd = new SQLiteCommand(query, con);            
con.Open();
try
{
IDataReader rdr = cmd.ExecuteReader();
try
{
while (rdr.Read())
{
byte[] a = (System.Byte[])rdr[0];
pictureBox1.Image = ByteToImage(a);
}
}
catch (Exception exc) { MessageBox.Show(exc.Message); }
}
catch (Exception ex) { MessageBox.Show(ex.Message); }
con.Close();
}       
}
}

Merci pour votre aide!

OriginalL'auteur Ignacio Gómez | 2012-06-01