SQL-Verbindung aufbauen (c++)
-
Servus...
Also ich versuche momentan eine SQL-Verbindung aufzubauen...aber irgendwie find ich nicht wirklich was gescheites...da ich mich da auch überhaupt gar nicht mit auskenne...
Welche includes, und vielleicht beispiele wären sehr hilfreich...

Schonmal danke im vorraus..
der chris
-
Was soll eine SQL-Verbindung sein? SQL ist eine Sprache.
-
eine verbindung zu einer sql datenbank, meine güte^^
-
-
-
Hi,
#define MAXBUFLEN 255 SQLHENV henv = SQL_NULL_HENV; SQLHDBC hdbc1 = SQL_NULL_HDBC; SQLHSTMT hstmt1 = SQL_NULL_HSTMT; SQLCHAR ConnStrIn[MAXBUFLEN] = "DRIVER={SQL Server};SERVER=MyServer"; SQLCHAR ConnStrOut[MAXBUFLEN]; SQLSMALLINT cbConnStrOut = 0; // Make connection without data source. Ask that driver // prompt if insufficient information. Driver returns // SQL_ERROR and application prompts user // for missing information. Window handle not needed for // SQL_DRIVER_NOPROMPT. retcode = SQLDriverConnect(hdbc1, // Connection handle NULL, // Window handle ConnStrIn, // Input connect string SQL_NTS, // Null-terminated string ConnStrOut, // Address of output buffer MAXBUFLEN, // Size of output buffer &cbConnStrOut, // Address of output length SQL_DRIVER_PROMPT);Das ist aus der MSDN. Für Abfragen und weiteres steht da natürlich auch alles drinn.
Achja und im Magazin gibt es Artikel über die MFC Klassen CRecordset und CDatabase mit dennen ich auch gute Erfahrungen gemacht habe.
MfG schirrmie
-
Was willst du verwenden?
ADO, OLEDB, ODBC ...?
-
eigentlich wollt ich ADO verwenden^^
wie gesagt...ich hab vorher nie ne DB-Verbindung hergestellt^^
-
also mir wurde gesagt ich soll irgendwie den native driver benutzen...
und das die anmeldung über windows authentification läuft...
dazu hab ich dann noch den server namen...mehr hab ich nicht >.>
Echt absolut keine Ahnung...
-
#define MAXBUFLEN 255 SQLHENV henv = SQL_NULL_HENV; SQLHDBC hdbc1 = SQL_NULL_HDBC; SQLHSTMT hstmt1 = SQL_NULL_HSTMT; SQLRETURN retcode; SQLCHAR ConnStrIn[MAXBUFLEN] ="DRIVER={SQL Native Client};SERVER=(base-server3);Trusted_Connection=yes"; SQLCHAR ConnStrOut[MAXBUFLEN]; SQLSMALLINT cbConnStrOut = 0; // Make connection without data source. Ask that driver // prompt if insufficient information. Driver returns // SQL_ERROR and application prompts user // for missing information. Window handle not needed for // SQL_DRIVER_NOPROMPT. retcode = SQLDriverConnectA(hdbc1,NULL,ConnStrIn,SQL_NTS,ConnStrOut,MAXBUFLEN,&cbConnStrOut,SQL_DRIVER_PROMPT); cout << retcode; SQLDisconnect(hdbc1);das cout gibt mir nen -2 aus...jemand ne ahnung was das zu bedeuten hat?
-
also ich brauch nen connectionstring der halt die wichtigen "daten" beinhaltet
wir benutzen MS SQL Server 2005der string sieht so aus bisher
Driver={SQL Native Client};Server=base-server3;Database=******;Trusted_Connection=yes;aber wie benutz ich den?

-
Ich persönlich würde es über ADO machen. ADO geht dann über OLEDB und OLEDB verwendet den "native SQL driver" (oder wie der genau heisst, geht auf jeden Fall NICHT über ODBC).
Ist für mich "direkt genug". Am Server braucht dazu nix installiert zu werden, Connection kann über Named Pipes oder TCP/IP Port 1433 laufen, Connection String sieht dann z.B. so aus (für Port 1433):provider=SQLOLEDB;data source=SERVERNAME;initial catalog=DATABASENAME;integrated security=SSPI;application name=Hotzenplotz;network library=dbmssocn;Ahja, am Client muss evtl. das aktuelle MDAC (Microsoft Data Access Components) installiert werden, welches bei Windows XP und Server 2003 aber schon dabei ist, muss man also üblicherweise auch nix installieren.
p.S.: "Ich persönlich würde es über ADO machen" einfach deswegen, weil ich mit ADO schon viel gearbeitet habe, die Geschwindigkeit immer ausreichen war, und ich das Interface schön einfach finde. Natürlich spricht auch nix gegen OLEDB direkt oder sonstwas, wenn man sich damit anfreunden kann.
-
mh...und wie benutze ich diesen connectionstring dann?
ich such hier schon stundenlang nach irgendeiner guten lösung...werd aber nich fündig
bzw....wie kann ich denn testen ob die connection funktioniert?
-
In dem code den du (und ich) gepostet hattest benutzt du doch schon ein Connectionstring. Hier noch ne seite für dich http://www.connectionstrings.com/
Da stehen alle möglichen drinn. Was klappt denn genau nicht?schirrmie
-
also mir wurde gerade gesagt dass diese -2 zu bedeuten hat, dass die verbindung steht.....und ich such mich hier dumm und dämlich...
jetzt würd ich gern testen ob ich irgendwas aus der tabelle auslesen kann...kenne aber den syntax nicht

-
Wie wärs wenn du mal selbst dein Kopf anstrengst und suchst, die MSDN wurde hier schon mehrfach genannt und das nicht ohne Grund

Das ist nur Ein Bsp. aus der MSDN und hast du dir den Artikel hier im Magazin (ganz unten im Forum) mal durchgelesen?
#define NAME_LEN 50 #define PHONE_LEN 50 SQLCHAR szName[NAME_LEN], szPhone[PHONE_LEN]; SQLINTEGER sCustID, cbName, cbAge, cbBirthday; SQLRETURN retcode; SQLHSTMT hstmt; retcode = SQLExecDirect(hstmt, "SELECT CUSTID, NAME, PHONE FROM CUSTOMERS ORDER BY 2, 1, 3", SQL_NTS); if (retcode == SQL_SUCCESS) { while (TRUE) { retcode = SQLFetch(hstmt); if (retcode == SQL_ERROR || retcode == SQL_SUCCESS_WITH_INFO) { show_error(); } if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO){ /* Get data for columns 1, 2, and 3 */ SQLGetData(hstmt, 1, SQL_C_ULONG, &sCustID, 0, &cbCustID); SQLGetData(hstmt, 2, SQL_C_CHAR, szName, NAME_LEN, &cbName); SQLGetData(hstmt, 3, SQL_C_CHAR, szPhone, PHONE_LEN, &cbPhone); /* Print the row of data */ fprintf(out, "%-5d %-*s %*s", sCustID, NAME_LEN-1, szName, PHONE_LEN-1, szPhone); } else { break; } } }schirrmie
-
mhh...okay...danke..
bei der msdn such ich die ganze zeit schon^^
und auch hier im forum..
aber hab vorher nie mit ner DB gearbeitet.aber irgendwie scheint der sich doch nicht verbunden zu haben....und wirklich keine ahnung wieso...kommt auf jedenfalls nen SQL_ERROR nach SQLDRIVERCONNECT raus
zugriffsrechte auf den server hab ich...mein kollege weiß auch nicht woran das liegen kann
hab auch alle möglichen connectionsstrings ausprobiert...also in verschiedenen formen und so...
aber das funkzt einfach nich...

hier mal der sourcecode...
int cl_event::sql_open() { SQLHENV henv; SQLHDBC hdbc; SQLHSTMT hstmt; SQLRETURN retcode; SQLPOINTER rgbValue; int i = 5; rgbValue = &i; SQLCHAR InConnStr[255]="Driver={SQL Server};Server=BASE-1;Database=TESTDB;Trusted_Connection=yes;Network=dbnmpntw;"; SQLWCHAR OutConnStr[255]; SQLSMALLINT OutConnStrLen; // Allocate environment handle retcode = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv); // Set the ODBC version environment attribute if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) { retcode = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER*)SQL_OV_ODBC3, 0); // Allocate connection handle if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) { retcode = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc); // Set login timeout to 5 seconds if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) { SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT, (SQLPOINTER)(rgbValue), 0); retcode = SQLDriverConnect( // SQL_NULL_HDBC hdbc, NULL, (SQLWCHAR*)InConnStr, _countof(InConnStr), OutConnStr, 255, &OutConnStrLen, SQL_DRIVER_NOPROMPT ); // Allocate statement handle if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) { retcode = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt); // Process data if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) { SQLFreeHandle(SQL_HANDLE_STMT, hstmt); } SQLDisconnect(hdbc); } SQLFreeHandle(SQL_HANDLE_DBC, hdbc); } } SQLFreeHandle(SQL_HANDLE_ENV, henv); } return 0; }