none
connexion à une base de données oracle RRS feed

  • Question

  • bjr

    j 'ai écrit un petit code pour me connecter à une base de données oracle , en suivant les instructions pour l'installation de la biblithèque ocilib

    voici mon code :

    #include "stdafx.h"
    #include <ocilib.h>
    #include <windows.h>


    int _tmain(int argc, _TCHAR* argv[])
    {
        OCI_Connection *cn;
     
      if (!OCI_Initialize(NULL, NULL, OCI_ENV_DEFAULT))
        return EXIT_FAILURE;
     
      cn = OCI_ConnectionCreate("xe", "biométrie", "biométrie", OCI_SESSION_DEFAULT);
     
      if (cn != NULL)
      {
        printf(OCI_GetVersionServer(cn));
       
        printf("Server major    version : %i\n", OCI_GetServerMajorVersion(cn));
        printf("Server minor    version : %i\n", OCI_GetServerMinorVersion(cn));
        printf("Server revision version : %i\n", OCI_GetServerRevisionVersion(cn));
       
        printf("Connection      version : %i\n", OCI_GetVersionConnection(cn));

        OCI_ConnectionFree(cn);
      }
     
      OCI_Cleanup();
     
      return EXIT_SUCCESS;

        return 0;
    }
    mais cela genere beaucoup d'erreurs  dont voici

    >Édition des liens en cours...
    1>LINK : fatal error LNK1104: impossible d'ouvrir le fichier 'ocilibm.dll.lib'

    mardi 1 juin 2010 19:42

Réponses

  • eMerci j ai pu ressoudre mon probleme l'erreur est que j 'avais mis ociliba.dll.lib au lieu de ociliba.lib mais j'ai un autre probleme je me connecte bien à la base de données mais je n'arrive pas à inserer des données dans la base de données pourtant mon code s'éxecute sans erreur de connexion ou erreur pour signaler que l'insertion n ' a pas resussi voici mon code

    OCI_Connection *cn;
        OCI_Statement  *st;
        int code;
        char name[30];
        char value[20];


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

        cn  = OCI_ConnectionCreate("xe", "bimotrie", "biométrie", OCI_SESSION_SYSDBA);
        st  = OCI_StatementCreate(cn);

    OCI_Prepare(st, "insert into base values(:code, :name, :value)");
        OCI_BindInt(st, ":code", &code);
        OCI_BindString(st, ":name", name, 30);
        OCI_BindString(st, ":value", value, 20);
       
        for (code = 1; code < 3; code++);
        {
            printf(name, "name %i", code);
            printf(value, "value %i", code);
       
            OCI_Execute(st);

        }
           
      OCI_Commit(cn);

      OCI_Cleanup();

        return EXIT_SUCCESS;
    }
    mercredi 2 juin 2010 12:23
  • Bonsoir,

     

    si aucune ligne n'est insérée dans la DB, c'est que l'éxecution échoue.

    Le code présenté ne comporte aucune gestion d'erreur :

    - soit par un error handler global (callback à passer à OCI_Initialize())

    - soit en utilisant OCI_GetLastError() et dans ce cas il faut passer le flag OCI_ENV_CONTEXT à OCI_Initalize())

     

    En gérant les erreurs, l'origine du soucis sera facilement identifiable.

     

    vendredi 4 juin 2010 20:40

Toutes les réponses

  • Bonjour,

    Pouvez-vous nous afficher la ligne de commande générée dans les options de compilation de votre projet dans "Configuration Properties -> Linker -> Command Line".

    Cordialement


    Gilles TOURREAU - MVP C# - MCP - Architecte .NET/Consultant/Formateur - http://gilles.tourreau.fr
    mercredi 2 juin 2010 07:33
    Modérateur
  • eMerci j ai pu ressoudre mon probleme l'erreur est que j 'avais mis ociliba.dll.lib au lieu de ociliba.lib mais j'ai un autre probleme je me connecte bien à la base de données mais je n'arrive pas à inserer des données dans la base de données pourtant mon code s'éxecute sans erreur de connexion ou erreur pour signaler que l'insertion n ' a pas resussi voici mon code

    OCI_Connection *cn;
        OCI_Statement  *st;
        int code;
        char name[30];
        char value[20];


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

        cn  = OCI_ConnectionCreate("xe", "bimotrie", "biométrie", OCI_SESSION_SYSDBA);
        st  = OCI_StatementCreate(cn);

    OCI_Prepare(st, "insert into base values(:code, :name, :value)");
        OCI_BindInt(st, ":code", &code);
        OCI_BindString(st, ":name", name, 30);
        OCI_BindString(st, ":value", value, 20);
       
        for (code = 1; code < 3; code++);
        {
            printf(name, "name %i", code);
            printf(value, "value %i", code);
       
            OCI_Execute(st);

        }
           
      OCI_Commit(cn);

      OCI_Cleanup();

        return EXIT_SUCCESS;
    }
    mercredi 2 juin 2010 12:23
  • Bonjour,

    Votre code semble bon. Sous Oracle n'avez vous pas un profiler (comme SQL Server) qui permettrait de tracer vos requêtes et voir si elles sont bien exécutée ?

    Cordialement


    Gilles TOURREAU - MVP C# - MCP - Architecte .NET/Consultant/Formateur - http://gilles.tourreau.fr
    mercredi 2 juin 2010 13:48
    Modérateur
  • SI  j'ai SQL developer qui me permet de voir si mes requetes sont justes mais quand j'execute mon code , il n'y a aucune donnée dans la base de données qui s'insère
    mercredi 2 juin 2010 14:13
  • Bonjour,

    Si vous exécutez la requête dans SQL Developer, est-ce que cela fonctionne ?

    Cordialement 


    Gilles TOURREAU - MVP C# - MCP - Architecte .NET/Consultant/Formateur - http://gilles.tourreau.fr
    mercredi 2 juin 2010 15:13
    Modérateur
  • Bonsoir,

     

    si aucune ligne n'est insérée dans la DB, c'est que l'éxecution échoue.

    Le code présenté ne comporte aucune gestion d'erreur :

    - soit par un error handler global (callback à passer à OCI_Initialize())

    - soit en utilisant OCI_GetLastError() et dans ce cas il faut passer le flag OCI_ENV_CONTEXT à OCI_Initalize())

     

    En gérant les erreurs, l'origine du soucis sera facilement identifiable.

     

    vendredi 4 juin 2010 20:40
  • Bonjour,

     

    JCK10, avez-vous essayé d’implémenter un système de gestion des erreurs, comme Vincent Rogier vous a dit ? Tenez-nous au courant si une telle implémentation vous apporte des informations supplémentaires sur la nature de l’erreur.

     

    Cordialement,

    Alex

    __________________________________________________________________________________________

    Publiez un article sur une de ces technologies : Visual Basic, C#, C++, .NET, ASP.NET, SQL Server, Silverlight, SharePoint 2010, SharePoint 2007

     

    Astuces pour Visual Studio 2010

    Didacticiels et astuces : VB.NET, C#, ASP.NET, .NET Framework, Workflow Foundation

     

     

    lundi 7 juin 2010 09:40