Advanced  Services Verbindung zu MySQL mit C-Bibliotheksfunktionen aus "mysql.h" Back Next Up Home

Anleitung zur Projekterstellung unter VisualStudio 2005/2008/2010

Komplettinstallation von MySQL

Um mit C auf MySQL zuzugreifen braucht man spezielle Include Dateien und Bibliotheken. bei der Installation von MySQL muß in diesem Fall darauf geachtet werden, daß man die "developer components" mitinstalliert. Am einfachsten geht das, indem man eine Komplettinstallation von MySQL vornimmt. Im folgenden finden Sie die Pfade zu den Includes und Libraries. Für neuere Versionen von MySQL passen Sie die Pfade entsprechend an. Die Verzeichnisse /include und /lib existieren auch in diesen Versionen.

Pfad zu den benötigten Headern

C:\Programme\MySQL\MySQL Server 5.1\include

Pfad zur Datei "libmysql.dll"

C:\Programme\MySQL\MySQL Server 5.1\lib\debug


Das MySQL 5.1 Reference Manual

Die englische Fassung findet sich unter

http://dev.mysql.com/doc/refman/5.1/en/index.html

Im Kapitel 20 (Connectors and APIs) findet man im Abschnitt 20.9. die "MySQL C API". Hier werden alle C-Funktionen beschrieben, die man zum Zugriff auf MySQL braucht.

Die etwas ältere deutsche Fassung findet sich unter

http://dev.mysql.com/doc/refman/5.1/de/index.html

Hier findet man die API im Kapitel 24 (APIs und Bibliotheken). Im Abschnitt 24.2. (MySQL-C-API) werden die C-Funktionen beschrieben, die man zum Zugriff auf MySQL braucht.


Projekteinstellungen im Visualstudio 2005/08/10
    projekt --> eigenschaften (eigenes fenster) --> konfigurationseigenschaften -->

    linker --> allgemein --> zusätzliche bibliotheksverzeichnisse

    hier das zusätzliche verzeichnis

        "C:\Programme\MySQL\MySQL Server 5.1\lib\opt"

    angeben

        linker --> befehlszeile --> zusätzliche optionen

    hier die bibliothek angeben, die eingebunden werden soll: "libmysql.lib"

Zeilen in mysql_com.h auskommentieren

In der Datei C:\Programme\MySQL\MySQL Server 5.1\include\mysql_com.h diese Zeilen auskommentieren:

ca. zeile 243       my_socket fd;                   /* For Perl DBI/dbd */

ca. zeile 427       int my_connect(my_socket s, const struct sockaddr *name,
                                unsigned int namelen, unsigned int timeout);

Falls man obige Einträge nicht findet, öffnet man die Datei mit einem ASCII-Editor und sucht nach "my_socket fd" und nach "int my_connect".


Ein Beispielprogramm
#include "stdafx.h"
#include "C:\Programme\MySQL\MySQL Server 5.1\include\mysql.h"
#include <iostream>

/*
Man kann in den Projekteinstellungen auch ein externes Includeverzeichnis eingeben, dann reicht
#include "mysql.h"
*/

using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
    MYSQL *conn;

    mysql_server_init(0, NULL, NULL);

    conn = mysql_init(NULL);

    if (conn == NULL)
    {
        cout << "Keine Datenbankinitialisierung moeglich!\n";
        return -1;
    }
    cout << "Datenbank initialisiert!\n";

    if (mysql_real_connect(conn,"localhost", "root", "root", "test", 3306, NULL, 0) == NULL)
    {
        cout << "Datenbank test konnte nicht geoeffnet werden!\n";
        cout << "Error: " << mysql_error(conn) << endl;
        return -1;
    }

    cout << "datenbank test wurde geoeffnet!\n";
    cout << "\nein paar ausgaben aus der tabelle adressen der test-datenbank:\n";

    MYSQL_FIELD *field;
    MYSQL_RES   *result;
    MYSQL_ROW   row;
    unsigned long *fieldLengths;

    mysql_query(conn, "SELECT * FROM namen");
    /* "namen" ist der Name der Tabelle auf die zugegriffen werden soll ! */

    result = mysql_store_result(conn);

    unsigned int fieldNumbers = mysql_num_fields(result);

    cout << "\nAnzahl der Spalten : " << fieldNumbers << endl;

    while ((row = mysql_fetch_row(result)))
    {
        fieldLengths = mysql_fetch_lengths(result);
        for(int i = 0; i < fieldNumbers; i++)
        {
          if (row[i]==0)
          {
              printf(" (null) ");
          }
          else
          {
              //printf("%s ",  row[i] );
              cout << row[i] << "  " ;
          }

        } // end for

        cout << endl;

    } // end while

    mysql_free_result(result);
    mysql_close(conn);
    cout << "\nDatenbank test wurde wieder geschlossen!\n";

    mysql_server_end();
    return 0;
}
Valid XHTML 1.0 Strict top Back Next Up Home