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

Bibliothèques Discussion :

Exemple de programme ODBC pour SQL Server


Sujet :

Bibliothèques

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Août 2010
    Messages
    50
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 50
    Points : 60
    Points
    60
    Par défaut Exemple de programme ODBC pour SQL Server
    Bonjour à tous,

    Je souhaiterais me connecter en C++ via ODBC à une source de données distante sous MS SQL Server.
    Je voudrais spécifier l'adresse IP dans les paramètres de connexion (sqlDriverConnect).
    Est-ce que quelqu'un peut me fournir un exemple SVP?

    Je vous fournis 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
    42
    43
    44
    45
    46
    47
    48
     
    #include <windows.h>
    #include <sql.h>
    #include <sqlext.h>
    #include <sqltypes.h>
    #include <stdio.h>
     
    int main () {
     
    	// Déclaration des variables SQL
    	SQLRETURN retcode;
    	SQLHENV henv;
    	SQLHDBC hdbc;
    	SQLHSTMT hstmt;
     
            char* param_con = "DRIVER={SQL SERVER}; Address=10.0.0.200:1433; Trusted_Connection=No; UID=mon_UID; PWD=mon_PWD;";
     
    	// setting environnement handle
    	retcode=SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv);
     
    	// Setting ODBC Driver version
    	if(retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
    		retcode=SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3,0);
    	else printf("Erreur sur l'instruction SQLAllocHandle !\n");
     
    	// setting connection handle
    	if(retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
    		retcode=SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);
    	else printf("Erreur sur l'instruction SQLSetEnvAttr !\n");
     
    	// Connection to database
    	if(retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
    		retcode = SQLDriverConnect(hdbc, NULL, (SQLWCHAR*) param_con, SQL_NTS, NULL, SQL_NTS, NULL, SQL_DRIVER_COMPLETE);
    	else printf("Erreur sur l'instruction SQLAllocHandle !\n");
     
    	if(retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
    		retcode=SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);
    	else printf("Erreur sur l'instruction SQLConnect !\n");
     
    	// Déconnexion
    	//SQLFreeStmt(hstmt, SQL_DROP);
    	SQLDisconnect(hdbc);
    	SQLFreeConnect(hdbc);
     
    	// Pause
    	system("PAUSE");
    	return 0;
    }

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Août 2010
    Messages
    50
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 50
    Points : 60
    Points
    60
    Par défaut Utilisation de la fonction OpenEx de ODBC
    J'ai trouvé une alternative. Le code ci-dessous fonctionne chez moi. J'utilise la classe CDatabase de MFC qui utilise les fonction SQLDriverConnect(...) et autres méthodes de l'API ODBC.

    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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
     
    #define _AFXDLL
    #include <afxdb.h>
    #include <iostream>
    #include <string>
    using namespace std;
     
     
    string convertCT2CA (CString cstring_in) {
    	CT2CA pszConvertedAnsiString (cstring_in);
    	std::string strStd (pszConvertedAnsiString);
    	return strStd;
    }
     
    int main () {
        CDatabase db;
        try {
    	// le caractère '\' doit être doublé, car caractère spécial
            if(!db.OpenEx(_T("Driver={SQL Server};Trusted_Connection=no;DATABASE=myDB;SERVER=10.0.0.100\\SQLEXPRESS;UID=myUID;PWD=myPWD;PORT=1433;OPTION=8;"))) {
    	    cout << "Wrong parameter(s)" << endl;
    	    return (-1);
    	}
        }
        catch (CDBException* pEx) {
            cout << "Impossible d'ouvrir la base de donnees" << endl;
    	AfxMessageBox(pEx->m_strError); 
    	pEx->Delete();
    	return (-1);
        }
     
        // Unicode
        CString Request = _T("SELECT * FROM phone_nb");
        CRecordset rs(&db);
        // Exécution de la requete
        if (!rs.Open(CRecordset::dynamic,Request)) {
            rs.Close();
    	return (-1);
        }
     
        CDBVariant* varValue = new CDBVariant;
        short nFields = rs.GetODBCFieldCount();
        while (!rs.IsBOF() && !rs.IsEOF()) {  // Pour parcourir tous les champs
            for (int index = 0; index < nFields; index++) {
    	    try {
    	        rs.GetFieldValue(index, *varValue);
    		cout << convertCT2CA(*(varValue->m_pstring));
    	    }
    	    catch (CDBException* Expt) {
    	        AfxMessageBox(Expt->m_strError);
    		Expt->Delete();
    	    }
            }
        	try { // champs suivant
    	    rs.MoveNext();
    	}
    	catch( CDBException* Execp) {
    	    AfxMessageBox(Execp->m_strError);
    	    Execp->Delete();
    	    break;
    	}
        }
        // libération espace mémoire pour les objets
        rs.Close();
        db.Close();
        delete varValue;
     
     
        return (-1);
    }

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Août 2010
    Messages
    50
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 50
    Points : 60
    Points
    60
    Par défaut Connexion base de données
    Les deux exemples ci-dessus fonctionnent. Il faut définir correctement la chaine de connexion au serveur SQL, comme définit sur le site:

    http://www.connectionstrings.com/

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

Discussions similaires

  1. Creation DSN ODBC mot de passe pour sql server
    Par bmayer dans le forum VB 6 et antérieur
    Réponses: 0
    Dernier message: 30/10/2012, 11h09
  2. Pilote JDBC pour SQL Server
    Par david71 dans le forum JDBC
    Réponses: 6
    Dernier message: 21/01/2005, 15h39
  3. Toad pour SQL server
    Par raf_le_dragon dans le forum Décisions SGBD
    Réponses: 5
    Dernier message: 18/11/2004, 18h58

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