Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[C#] Comment enregistrer une image dans une tables access ?

2 réponses
Avatar
Philippe Cazaux-Moutou
Bonjour

j ai une form et une classe (ou sont crées mes datasets et objtes pour sql)

depuis la form je passe mon image a la classe


Code :
_AjoutFilm.Fi_Jacquette = pctBoxCover.Image;
dans ma classe je récupere l image comme ceci


Code :
private Image fi_Jacquette;

public Image Fi_Jacquette
{
get { return fi_Jacquette; }
set { fi_Jacquette = value; }
}
Puis dans ma classe je veux inserer des données, et donc mon image dans une
table

je fais ca


Code :
String _strSql = "INSERT INTO Films ( FI_Num, FI_Titre,
FI_Annee_sortie, FI_Date_Parution, FI_Date_Achat, FI_Duree, FI_Zone,
FI_Realisateur, FI_Studio, FI_Genre, FI_Resume, FI_Modif_Date, FI_Modif_Qui,
FI_Jacquette)"
+ " VALUES ( @FI_Num, @FI_Titre,
@FI_Annee_sortie, @FI_Date_Parution, @FI_Date_Achat, @FI_Duree, @FI_Zone,
@FI_Realisateur, @FI_Studio, @FI_Genre, @FI_Resume, @FI_Modif_Date,
@FI_Modif_Qui, @FI_Jacquette);";
Int32 RetourValeurInsertion = 0;

try
{
using (DbConnection cn = new
OleDbConnection(methode.doConnectionString()))
{
using (DbCommand cmd = new OleDbCommand(_strSql,
(OleDbConnection)cn))
{
cmd.CommandType = CommandType.Text;

.....

DbParameter FI_Jacquette = new
OleDbParameter("@FI_Jacquette", OleDbType.Binary);
FI_Jacquette.Value = fi_Jacquette;
cmd.Parameters.Add(FI_Jacquette);

cn.Open();
cmd.ExecuteNonQuery();

cmd.CommandText = "SELECT @@IDENTITY";
RetourValeurInsertion = (Int32)cmd.ExecuteScalar();

cn.Close();

return RetourValeurInsertion;
}
}
}
catch (Exception e)
{
tou marche bien si je mets la patie image en commentaire sinon j ai une
erreur


Citation:
+ $exception {"Échec de la conversion de la valeur de paramètre d'un
Bitmap en un Byte[]."} System.Exception {System.InvalidCastException}


Qui peut m aider car ca fait 1 mois que je butes la dessus

merci

2 réponses

Avatar
Simon Mourier [SoftFluent]
Il faut d'abord créer un tableau d'octet (byte[]) correspondant à l'instance
d'Image en question, comme l'indique l'exception. Par exemple:

FI_Jacquette.Value = ToBytes(fi_Jacquette);

public static byte[] ToBytes(Image image)
{
if (image == null)
throw new ArgumentNullException("image");

using (MemoryStream stream = new MemoryStream())
{
image.Save(stream, ImageFormat.Jpeg);
return stream.GetBuffer();
}
}

Simon.
www.softfluent.com


"Philippe Cazaux-Moutou" a écrit dans le
message de news: 44919964$0$847$
Bonjour

j ai une form et une classe (ou sont crées mes datasets et objtes pour
sql)

depuis la form je passe mon image a la classe


Code :
_AjoutFilm.Fi_Jacquette = pctBoxCover.Image;
dans ma classe je récupere l image comme ceci


Code :
private Image fi_Jacquette;

public Image Fi_Jacquette
{
get { return fi_Jacquette; }
set { fi_Jacquette = value; }
}
Puis dans ma classe je veux inserer des données, et donc mon image dans
une table

je fais ca


Code :
String _strSql = "INSERT INTO Films ( FI_Num, FI_Titre,
FI_Annee_sortie, FI_Date_Parution, FI_Date_Achat, FI_Duree, FI_Zone,
FI_Realisateur, FI_Studio, FI_Genre, FI_Resume, FI_Modif_Date,
FI_Modif_Qui, FI_Jacquette)"
+ " VALUES ( @FI_Num, @FI_Titre,
@FI_Annee_sortie, @FI_Date_Parution, @FI_Date_Achat, @FI_Duree, @FI_Zone,
@FI_Realisateur, @FI_Studio, @FI_Genre, @FI_Resume, @FI_Modif_Date,
@FI_Modif_Qui, @FI_Jacquette);";
Int32 RetourValeurInsertion = 0;

try
{
using (DbConnection cn = new
OleDbConnection(methode.doConnectionString()))
{
using (DbCommand cmd = new OleDbCommand(_strSql,
(OleDbConnection)cn))
{
cmd.CommandType = CommandType.Text;

.....

DbParameter FI_Jacquette = new
OleDbParameter("@FI_Jacquette", OleDbType.Binary);
FI_Jacquette.Value = fi_Jacquette;
cmd.Parameters.Add(FI_Jacquette);

cn.Open();
cmd.ExecuteNonQuery();

cmd.CommandText = "SELECT @@IDENTITY";
RetourValeurInsertion = (Int32)cmd.ExecuteScalar();

cn.Close();

return RetourValeurInsertion;
}
}
}
catch (Exception e)
{
tou marche bien si je mets la patie image en commentaire sinon j ai une
erreur


Citation:
+ $exception {"Échec de la conversion de la valeur de paramètre d'un
Bitmap en un Byte[]."} System.Exception {System.InvalidCastException}


Qui peut m aider car ca fait 1 mois que je butes la dessus

merci



Avatar
Philippe Cazaux-Moutou
Merci

ca marche

"Simon Mourier [SoftFluent]" a écrit dans le
message de news:
Il faut d'abord créer un tableau d'octet (byte[]) correspondant à
l'instance d'Image en question, comme l'indique l'exception. Par exemple:

FI_Jacquette.Value = ToBytes(fi_Jacquette);

public static byte[] ToBytes(Image image)
{
if (image == null)
throw new ArgumentNullException("image");

using (MemoryStream stream = new MemoryStream())
{
image.Save(stream, ImageFormat.Jpeg);
return stream.GetBuffer();
}
}

Simon.
www.softfluent.com


"Philippe Cazaux-Moutou" a écrit dans le
message de news: 44919964$0$847$
Bonjour

j ai une form et une classe (ou sont crées mes datasets et objtes pour
sql)

depuis la form je passe mon image a la classe


Code :
_AjoutFilm.Fi_Jacquette = pctBoxCover.Image;
dans ma classe je récupere l image comme ceci


Code :
private Image fi_Jacquette;

public Image Fi_Jacquette
{
get { return fi_Jacquette; }
set { fi_Jacquette = value; }
}
Puis dans ma classe je veux inserer des données, et donc mon image dans
une table

je fais ca


Code :
String _strSql = "INSERT INTO Films ( FI_Num, FI_Titre,
FI_Annee_sortie, FI_Date_Parution, FI_Date_Achat, FI_Duree, FI_Zone,
FI_Realisateur, FI_Studio, FI_Genre, FI_Resume, FI_Modif_Date,
FI_Modif_Qui, FI_Jacquette)"
+ " VALUES ( @FI_Num, @FI_Titre,
@FI_Annee_sortie, @FI_Date_Parution, @FI_Date_Achat, @FI_Duree, @FI_Zone,
@FI_Realisateur, @FI_Studio, @FI_Genre, @FI_Resume, @FI_Modif_Date,
@FI_Modif_Qui, @FI_Jacquette);";
Int32 RetourValeurInsertion = 0;

try
{
using (DbConnection cn = new
OleDbConnection(methode.doConnectionString()))
{
using (DbCommand cmd = new OleDbCommand(_strSql,
(OleDbConnection)cn))
{
cmd.CommandType = CommandType.Text;

.....

DbParameter FI_Jacquette = new
OleDbParameter("@FI_Jacquette", OleDbType.Binary);
FI_Jacquette.Value = fi_Jacquette;
cmd.Parameters.Add(FI_Jacquette);

cn.Open();
cmd.ExecuteNonQuery();

cmd.CommandText = "SELECT @@IDENTITY";
RetourValeurInsertion =
(Int32)cmd.ExecuteScalar();

cn.Close();

return RetourValeurInsertion;
}
}
}
catch (Exception e)
{
tou marche bien si je mets la patie image en commentaire sinon j ai une
erreur


Citation:
+ $exception {"Échec de la conversion de la valeur de paramètre d'un
Bitmap en un Byte[]."} System.Exception {System.InvalidCastException}


Qui peut m aider car ca fait 1 mois que je butes la dessus

merci