Verbindung zu MySQL Datenbank

Der nette Mann

Erfahrenes Mitglied
Hi,

ich habe noch nie mit C++ und Datenbanken gearbeitet. Nun will ich aber ein Programm schreiben, daß auf eine MySQL Datenbank zugreift und daraus Informationen liest. Zunächst soll diese Datenbank noch lokal erreichbar sein, aber in einer späteren Version soll auf die Datenbank meines Webservers zurückgegriffen werden.

Ich habe jetzt mich schon mal umgeschaut, was ich dazu brauche und mysql++ gefunden. Ich bekomme es aber nicht einmal hin, die Beispiele zum laufen zu bringen. Arbeitet jemand von euch damit, oder gibt es "einfachere" Lösungen für mein Problem. Oder kann mir jemand von euch sagen, was ich machen muss, damit ich zumindest mal die Beispiele von mysql++ zum laufen bekomme. Ich nutze Visual Studio .NET 2003...

Vielen Dank

Der nette Mann
 
ja ich schleus mich auch mal in diesen club rein :p wie geht denn nun das? ich hab alles das was du hast und ich hab in einem anderen Beitrag gesehn das dies über ODBC geht hm aber hat jemand ein kleines Beispiel zur Hand das ich mal ankucken könnte. Also Datenbankanbindung und Daten rauslesen?
 
Also ich hab einen Helpdesk in C und Teilen WinAPI erstellt, der mit Hilfe von ODBC die Verbindung zum SQL herstellt. Hier mein Beispiel:

Code:
BOOL RetCodeSuccess( int nRetcode ) 
{	
	if(nRetcode == SQL_NO_DATA)
			MessageBox(0,"No Data","SQL_NO_DATA",0);			
	if(nRetcode == SQL_STILL_EXECUTING)
			MessageBox(0,"Busy","SQL_STILL_EXECUTING",0)
	if(nRetcode == SQL_ERROR)
			MessageBox(0,"SQL_ERROR","SQL_ERROR",0);	
	if(nRetcode == SQL_INVALID_HANDLE)	
			MessageBox(0,"SQL_INVALID_HANDLE","SQL_INVALID_HANDLE",0);	
	return 1;
}

BOOL SQL()
{		
	SQLINTEGER nResultRows;	
	SQLHSTMT hstatement;	
sprintf(&sqlquery,"SELECT PK_Userid, Username, Userage FROM Userdate ORDER BY PK_Userid  ASC");
	const char* pszQuery1 = sqlquery;		



	
	retcode = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv);  
	if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) 
	{   			
		retcode = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, 0); 
		if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) 
		{	
			retcode = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc); 
			if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) 
			{
				SQLSetConnectAttr(hdbc, 0, 0, 0);
//Hier kommen jetzt die Verbindungsdaten
				retcode = SQLConnect(hdbc, (SQLCHAR*) "DB NAME", SQL_NTS, (SQLCHAR*) "HIER DER BENUTZERNAME DER DB", SQL_NTS,(SQLCHAR*) "PASSWORT", SQL_NTS);	
				if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
				{	
					retcode = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt); 
					if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) 
					{
						if( RetCodeSuccess( SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstatement) ) ) 
						{
							
							if( !RetCodeSuccess( SQLExecDirect( hstatement, (SQLCHAR*) pszQuery1, SQL_NTS ) ) ) 
							{
								MessageBox (NULL, TEXT ("Bearbeitung Fehlgeschlagen!"),	0, MB_ICONERROR);									
								return 0;
							}
									
//Für 3 DB Ergebnisse:													
SQLBindCol( hstatement, 1,  SQL_C_CHAR, (SQLPOINTER) &PK_USERID,  2,   &len );	
SQLBindCol( hstatement, 2,  SQL_C_CHAR, (SQLPOINTER) &Username,  20,   &len );	
SQLBindCol( hstatement, 3,  SQL_C_CHAR, (SQLPOINTER) &Userage,  11,   &len );		SQLRowCount( hstatement, &nResultRows );
if( nResultRows != 0 ) 
{	
if(RetCodeSuccess(SQLFetch(hstatement))) 
	{	
	Anweisungen
	Anweisungen
	Anweisungen
	Anweisungen				
	}
}
		}
						
						}
					}
					SQLDisconnect(hdbc);					
				}
				else
				{
					MessageBox (NULL, TEXT ("SQL Verbindung fehlgeschlagen!"),	0, MB_ICONERROR);										
					return FALSE;
				}
			}
			SQLFreeHandle(SQL_HANDLE_DBC, hdbc);
			SQLFreeHandle(SQL_HANDLE_ENV, henv);			
		}
	}
    return TRUE;
}

ACHTUNG! DIES IST NUR EIN BEISPIEL UND EIN 'AUSZUG' AUS MEINEM QUELLTEXT!

Achtet bitte auf evtl. fehlende oder fehlplatzierte Klammern! Ebenso auf die 3 einzutragenden Informationen (DBNAME, USERNAME, PASSWORT), ohne die ODBC keine Verbindung herstellt!
Des Weiteren könnte es sein, dass ihr unter Start --> Einstellungen --> Systemsteurung --> Verwaltung --> Datenquellen (ODBC) noch eine ODBC Verbindung eintragen müsst! Sonst werdet ihr ggf. keine Rückgabe Werte erhalten...
Wie der eine oder andere vielleicht auch gesehen hat, ist der Teil "MessageBox..." aus der WinAPI. Also wenn Fehler auftreten bitte nicht in meine Richtung schiessen! Das ist ein Auszug aus meinem Quelltext. Die DB Abfragen habe ich per Mehrfachauswahl realisiert und wie das nun mal läuft waren es plötzlich 1000 Zeilen Quelltext! Deshalb kann es evtl. zu dem einen oder anderen Fehler kommen... ;)

PS - Für ein kleines Feedback wäre ich Euch dankbar
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück