IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Insertion d'images dans BDD sql Compact


Sujet :

C#

  1. #1
    Membre régulier Avatar de bobjoumi
    Profil pro
    Inscrit en
    Février 2009
    Messages
    94
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Février 2009
    Messages : 94
    Points : 86
    Points
    86
    Par défaut Insertion d'images dans BDD sql Compact
    Bonjour, je développe une petite application Windows Mobile. le but est de prendre des photos et les enregistrer dans la BDD.
    alors j'ai crée un table PHOTO avec deux colonnes, ID int(4) auto-incrément et une autre de type image.

    Voila mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
     
            private void SqlInsertValuesRequest()
            {
                try
                {
                    SqlCeConnection SqlCnx = new SqlCeConnection(@"Data Source=\Program Files\MemoPhoto5\Database.sdf");
                    string sSQL = "INSERT INTO PHOTO VALUES (?)";
                    SqlCeCommand SqlCommand = new SqlCeCommand(sSQL, SqlCnx);
                    byte[] photo = GetPhoto(textBox1.Text.Trim());
                    SqlCeParameter ParamImage = new SqlCeParameter("IMAGE", SqlDbType.Image, photo.Length);
                    ParamImage.Value = photo;
     
                    SqlCommand.Parameters.Add(ParamImage);
     
                    SqlCnx.Open();
                    SqlCommand.Prepare();
                    SqlCommand.ExecuteNonQuery();
                    if (SqlCnx.State == ConnectionState.Open)
                    {
                        SqlCnx.Close();
                    }
                    MessageBox.Show("Requête SQL effectuée avec succès", "OK", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                }
                catch (SqlCeException Ex)
                {
                    MessageBox.Show("Erreur SQL inattendue.\n" + Ex.Message, "Erreur", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                }
                catch (Exception Ex)
                {
                    MessageBox.Show("Erreur inattendue.\n" + Ex.Message, "Erreur", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                }
            }
            private byte[] GetPhoto(string filePath)
            {
                FileStream stream = new FileStream(filePath, FileMode.Open, FileAccess.Read);
                BinaryReader reader = new BinaryReader(stream);
                byte[] photo = reader.ReadBytes((int)stream.Length);
                reader.Close();
                stream.Close();
                return photo;
            }
    j'obtiens une exception à l'ExecuteNonQuery() et l'insert ne ce fait pas.

    Le nombre des colonnes dans la requête et dans la table ne correspond pas. [ Number of columns in query = 1, Number of columns in table = 2 ]
    c'est la premier fois que je fais des enregistrement d'images et je suis un peu perdu...

    Merci d'avance

  2. #2
    Rédacteur
    Avatar de Arnaud F.
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Août 2005
    Messages
    5 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur COBOL
    Secteur : Finance

    Informations forums :
    Inscription : Août 2005
    Messages : 5 183
    Points : 8 873
    Points
    8 873
    Par défaut
    Bonjour,

    il suffit de modifier votre requête de la sorte :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO PHOTO(<nom de votre champ photo>) VALUES (?)

    car par défaut, même si un champ est en auto-incrément, il est considéré comme un champ avant tout, donc pour l'ignorer, il faut nommer explicitement les champs que vous souhaitez insérer.

    P.S: De plus, il me semble que le nom du paramètre doit correspondre au nom de la variable utilisée dans la requête, ce qui donnerait donc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SqlCeConnection SqlCnx = new SqlCeConnection(@"Data Source=\Program Files\MemoPhoto5\Database.sdf");
    string sSQL = "INSERT INTO PHOTO(<nom du champ photo>) VALUES (@photo)";
    SqlCeCommand SqlCommand = new SqlCeCommand(sSQL, SqlCnx);
    byte[] photo = GetPhoto(textBox1.Text.Trim());
    SqlCeParameter ParamImage = new SqlCeParameter("@photo", SqlDbType.Image, photo.Length);
    ParamImage.Value = photo;

    ++
    C'est par l'adresse que vaut le bûcheron, bien plus que par la force. Homère

    Installation de Code::Blocks sous Debian à partir de Nightly Builds

  3. #3
    Invité
    Invité(e)
    Par défaut
    Essaie en changeant ta requête précédente par celle ci-dessous :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string sSQL = "INSERT INTO PHOTO (nom_ta_colonne_image) VALUES (?)";
    nom_ta_colonne_image correspond au nom de la colonne devant stocker l'image.

  4. #4
    Membre régulier Avatar de bobjoumi
    Profil pro
    Inscrit en
    Février 2009
    Messages
    94
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Février 2009
    Messages : 94
    Points : 86
    Points
    86
    Par défaut
    Oui!!! c'est une erreur de débutant
    je pensé que c'était lié à mon image mais en faite c'est complètement autre chose.
    Merci les gars

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    349
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 349
    Points : 441
    Points
    441
    Par défaut
    Salut,

    En enregistrant tes images dans la base de donnée, tu vas la faire exploser...
    Le mieux étant de stocker l'adresse de ton image, de recuperer cette valeur et ensuite l'afficher.

    Premierement, ta base se portera mieux et ensuite, ça ira bien plus vite je penses.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Image dans Bdd (Sql Serveur ) avec model edmx
    Par GilardeauG dans le forum Linq
    Réponses: 1
    Dernier message: 26/10/2009, 16h29
  2. [PHP/SQL] Problème d'insertion d'image dans SQL SERVEUR
    Par Joelatack dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 24/07/2009, 14h28
  3. [MySQL] Upload d'image avec insertion du chemin dans bdd
    Par DjChat dans le forum PHP & Base de données
    Réponses: 10
    Dernier message: 29/05/2008, 10h45
  4. Enregistrement et sélections images dans bdd ms sql.
    Par Jean_guy dans le forum Windows Forms
    Réponses: 5
    Dernier message: 05/01/2008, 11h51
  5. Insertion code html dans bdd
    Par jeff37 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 15/04/2004, 15h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo