none
inserer une image dans une base de données RRS feed

  • Question

  • Bonsoir ,

    j ai un probleme pour inserer une image dans ma base de données , mon code s'éxecute bien les autres colonnes de ma table sont remplis sauf celle de l'image ,  voici mon code :


    #include "stdafx.h"
    #include "ocilib.h"
    #include "windows.h"
    #include <stdlib.h>
    #include <stdio.h>
    #include <string.h>

    int _tmain(int argc, _TCHAR* argv[])
    {
        OCI_Connection *cn;
        OCI_Statement *st;
        OCI_Lob *lob;
        FILE *f;
        unsigned char buffer[1024];
        int size , n,id,hash ;

        if (!OCI_Initialize(NULL, NULL, OCI_ENV_DEFAULT))
            return EXIT_FAILURE;

        cn = OCI_ConnectionCreate("xe", "biométrie", "biométrie", OCI_SESSION_DEFAULT);
        st = OCI_StatementCreate(cn);
         
        id = 11;
        hash = 127;
        f  = fopen("D:\\OPS\\JCK\\Megatech\\ImageTemplate\\face.jpg", "rb");
       
        if (f != NULL)
        {
            fseek (f , 0 , SEEK_END);
            size = ftell(f);
            rewind (f);
            
            printf("\nTotal bytes to write : %d\n", size);
           
            lob = OCI_LobCreate(cn, OCI_BLOB);
           
            OCI_Prepare(st, "insert into face(TEMLATE , ID , HASH) values(:TEMLATE ,:ID, :HASH)");
            OCI_BindLob(st, ":TEMLATE", lob);
            OCI_BindInt(st, ":ID", &id);
            OCI_BindInt(st, ":HASH", &hash);
            OCI_Execute(st);
      
            /* write data into table by chunks of 1024 bytes */
            while ((n = fread(buffer, 1, sizeof(buffer), f)))
            {
                OCI_LobWrite(lob, buffer, n);
            }
      
            printf("\nTotal bytes written : %s\n");
            fclose(f);
      
            OCI_Commit(cn);
      
            OCI_LobFree(lob);
        }
       
        OCI_Cleanup();

        return EXIT_SUCCESS;
    }
     en plus à l'exécution j'ai ce message :

    warning C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.

    jeudi 3 juin 2010 17:09

Réponses

  • merci j ai trouve la solution a mon probleme je devais mettre  :

      lob = OCI_LobCreate(cn, OCI_BLOB);
           
              while ((n = fread(buffer, 1, sizeof(buffer), f)))
            {
                OCI_LobWrite(lob, buffer, n);
            }

    avant de commencer à ecrire

    OCI_Prepare(st, "insert into face(TEMLATE , ID , HASH , NOM ) values(:TEMLATE ,:ID, :HASH , :NOM)");

    mais j ai un autre probleme je reussis à inserer un seul caractere dans la base de données mais quand il s'agit d'une de caractères il s'insère dans la base de données mais est illisible . merci de m'aider

    • Marqué comme réponse Alex Petrescu vendredi 4 juin 2010 14:16
    jeudi 3 juin 2010 18:47

Toutes les réponses

  • merci j ai trouve la solution a mon probleme je devais mettre  :

      lob = OCI_LobCreate(cn, OCI_BLOB);
           
              while ((n = fread(buffer, 1, sizeof(buffer), f)))
            {
                OCI_LobWrite(lob, buffer, n);
            }

    avant de commencer à ecrire

    OCI_Prepare(st, "insert into face(TEMLATE , ID , HASH , NOM ) values(:TEMLATE ,:ID, :HASH , :NOM)");

    mais j ai un autre probleme je reussis à inserer un seul caractere dans la base de données mais quand il s'agit d'une de caractères il s'insère dans la base de données mais est illisible . merci de m'aider

    • Marqué comme réponse Alex Petrescu vendredi 4 juin 2010 14:16
    jeudi 3 juin 2010 18:47
  • Bonjour,

    Vous aurez plus de chance d'obtenir une réponse sur le forum/support d'Oracle (ou une communauté Oracle). Votre problème et fortement lié à Oracle...

    Cordialement


    Gilles TOURREAU - MVP C# - MCP - Architecte .NET/Consultant/Formateur - http://gilles.tourreau.fr
    jeudi 3 juin 2010 20:18
    Modérateur