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 :

Attaquer une base de données


Sujet :

C++

  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 825
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 825
    Par défaut Attaquer une base de données
    Bonjour à tous,


    Je voudrais faire un petit module me permettant d'exploiter des bases de données, que ça soit SQLServer, Oracle, MySQL ou autre (à vrai dire, c'est l'utilisateur qui choisira).

    Je ne sais pas s'il faut que j'utilise ODBC où si je propose une interface de connexion à la base en spécialisant pour chaque type de base.

    J'ai cherché un peu d'infos sur l'utilisation de l'api ODBC... ça m'a l'air super rigide. Je suis tombé également sur libodbc++ mais j'ai trouvé peu de resource pour savoir comment l'utiliser. Sinon, j'ai téléchargé "ODBC wrapped" que je n'ai pas encore testé.

    Sinon j'ai cherché comment attaquer SQLServer en C++, j'ai pas vraiment trouvé de trucs utils et/ou léger.

    J'ai peu d'expérience là dedans, est-ce que vous pouvez me conseiller avant que je m'embarque dans un truc qui ne convient pas ?


    Merci beaucoup,

    A bientôt

  2. #2
    Expert confirmé
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Par défaut
    Si tu veux une application qui fonctionne indépendamment de la base de données utilisée, ODBC est effectivement un bon choix. Si tu développes sous Windows uniquement, tu peux également utiliser ADO qui est plus simple à programmer que ODBC ou encore les classes MFC qui encapsulent l'API ODBC. Je ne sais pas si tu l'as déjà vu mais il y a un tutoriel sur ODBC en C ici.

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 825
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 825
    Par défaut
    Merci pour cette réponse,

    J'ai commecé quelques tests de l'api ODBC, il me manque juste à savoir comment trouver le nombre de résultats d'une requête qu'on s'aprête à fetcher.

    merci

  4. #4
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 294
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 294
    Par défaut
    Salut,

    Peut-être que SOCI te conviendrait ?

    MAT.

  5. #5
    Expert confirmé
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Par défaut
    Citation Envoyé par mister3957 Voir le message
    Merci pour cette réponse,

    J'ai commecé quelques tests de l'api ODBC, il me manque juste à savoir comment trouver le nombre de résultats d'une requête qu'on s'aprête à fetcher.

    merci
    Pourquoi vouloir connaître le nombre de lignes retournées par une requête alors qu'on s'apprête à fetcher ? Voici comment il faut considérer le problème :

    - Tu veux juste connaître le nombre d'enregistrements vérifiant certains critères, pas les lire, alors utilise un "SELECT COUNT(*) FROM <table> WHERE (<condition>)" bien standard qui ne pose aucun problème. Fetches une fois pour lire la valeur retournée par la requête.

    - Tu veux parcourir tous les enregistrement retournés par une requête. Pas besoin de connaître d'avance le nombre de lignes retournées, fetches simplement jusqu'à ce qu'erreur s'en suive.

    Sache qu'il existe également la fonction SQLRowCount qui permet de connaître le nombre d'enregistrements qui ont subit des modifications suite à un UPDATE, un INSERT ou un DELETE. Il n'est pas garanti que chaque SGBD soit capable de retourner également le nombre d'enregistrements retournés par un SELECT.

  6. #6
    Membre Expert
    Avatar de white_tentacle
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    1 505
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 505
    Par défaut
    Il n'est pas garanti que chaque SGBD soit capable de retourner également le nombre d'enregistrements retournés par un SELECT.
    D'autant que pour compter le nombre d'éléments retournés par une requête, le SGBD n'a d'autre choix que de... les parcourir (sauf exceptions).

    Donc tu auras tout intérêt à faire toi-même le parcours, jusqu'à ce qu'erreur (plus d'éléments) s'ensuive.

  7. #7
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Citation Envoyé par white_tentacle Voir le message
    D'autant que pour compter le nombre d'éléments retournés par une requête, le SGBD n'a d'autre choix que de... les parcourir (sauf exceptions).

    Donc tu auras tout intérêt à faire toi-même le parcours, jusqu'à ce qu'erreur (plus d'éléments) s'ensuive.
    Je ne serais pas aussi affirmatif. Un SELECT COUNT n'aboutira qu'à un seul échange entre ton code C++ et ta base. Parcourir tous les éléments (surtout si c'est un SELECT *) va nécessiter de fournir tous les résultats. Je pense qu'on doit y perdre un peu...

  8. #8
    Membre Expert
    Avatar de white_tentacle
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    1 505
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 505
    Par défaut
    Je ne serais pas aussi affirmatif. Un SELECT COUNT n'aboutira qu'à un seul échange entre ton code C++ et ta base.
    Je suis bien d'accord. Ma remarque s'appliquait bien à compter les éléments issus d'une requête select, pas à un select count (qui lui, utilise l'index éventuel et donc est souvent beaucoup plus rapide).

  9. #9
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 825
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 825
    Par défaut
    Connaître le nombre d'enregistrement retournés me permettrait de pouvoir faire une barre de progression et d'indiquer à l'utilisateur l'avancement du chargement de ses données.

    J'espérais ne pas avoir à faire deux requêtes (le COUNT(*) et la requête).

    Merci

Discussions similaires

  1. Réponses: 9
    Dernier message: 17/05/2010, 11h21
  2. Attaque d'une base de données oracle par JDev
    Par nejib salem dans le forum JDeveloper
    Réponses: 0
    Dernier message: 09/07/2009, 21h14
  3. Quelle bibliothèque pour attaquer une base de données Oracle ?
    Par traoreefo dans le forum Interfaces de programmation
    Réponses: 2
    Dernier message: 10/01/2008, 10h04
  4. Réponses: 9
    Dernier message: 02/01/2007, 12h03
  5. attaquer une base de données Oracle avec du code C
    Par lecyberax dans le forum Oracle
    Réponses: 3
    Dernier message: 18/04/2006, 13h24

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