C++ MySQL-Verbindung aufbauen



  • @theta
    Danke für die schnelle Antwort.
    Welche *.lib wird denn noch gelinkt?

    LG Niklas



  • Hallo Niklasg,

    hast du denn den Pfad zu der Lib-Datei auch richtig unter "Zusätzliche Bibiotheksverzeichnisse" eingetragen (unter Punkt 2 im Artikel - wobei der Text bei meinem Browser rechts vom Bild steht, also die Formatierung nicht so ganz stimmt ;-)?



  • @Th69

    ja das habe ich auch gemacht. Für mich sieht die Fehlermeldung aus als ob er was von C benutzen will was aber unter C++ nicht läuft?

    Hier ist noch mal der aktuelle Code:

    // MySql.cpp: Hauptprojektdatei.
    
    #pragma comment (lib,"mysqlclient.lib")
    #pragma comment (lib,"wsock32")<
    
    #include "stdafx.h"
    #include <my_global.h>
    #include <mysql.h>
    
    using namespace System;
    
    int main(array<System::String ^> ^args)
    {
    
    	MYSQL *conn;
        MYSQL_RES *res;
        MYSQL_ROW row;
        char *server = "127.0.0.1";
        char *user = "root";
        char *password = "++++";
        char *database = "matthias_ml-bkf";
        char query[] = "SHOW VARIABLES";
    
        /* init mysql */
        conn = mysql_init(NULL);
    
        /* connect to database */
        if ( mysql_real_connect(conn, server, user, password, database, 0, NULL, 0) )
        {
            /* execute query
            mysql_query gibt 0 zurück
            wenn alles ok ist
            */
            if ( !mysql_query(conn, query))
            {
                /* Result abholen */
                res = mysql_store_result(conn);
                /* Result durchlaufen */
                while ((row = mysql_fetch_row(res)) != NULL)
                {
                    OutputDebugStringA(row[0]);
                    OutputDebugStringA("=");
                    OutputDebugStringA(row[1]);
                    OutputDebugStringA("\n");
                }
                /* Result wieder freigeben */
                mysql_free_result(res);
            }
            else
            {
                OutputDebugStringA("Query failed! ");
                OutputDebugStringA(mysql_error(conn));
                OutputDebugStringA("\n");
            }
        }
        else
        {
            OutputDebugStringA("Connection failed! ");
            OutputDebugStringA(mysql_error(conn));
            OutputDebugStringA("\n");
        }
    
        /* close connection */
        mysql_close(conn);
    }
    


  • Die Winsock2 Library heisst: ws2_32.lib
    Der Header heisst winsock2.h

    EDIT:
    Mein Kommentar tut wohl nichts zur Sache...



  • @theta
    Ja leider bringt mich das nicht weiter 😞

    Kann mir vielleicht jemand ein Tutorial empfhelen das das Thema MySQL behandelt? Oder hat jemand einen Skript der Funktioniert muss ja nciht unbedingt der sein?

    LG Niklas



  • Niklasg schrieb:

    @theta
    Ja leider bringt mich das nicht weiter 😞

    Dann frag' doch nach!?



  • Die frage wurde von mir schon mehrmals gestellt ^^



  • theta schrieb:

    Die Winsock2 Library heisst: ws2_32.lib
    Der Header heisst winsock2.h

    Gegen ws2_32.lib hast also gelinkt? Fehlermeldungen aktuell?



  • Die aktuellen Fehlermeldungen:

    1>------ Erstellen gestartet: Projekt: MySql2, Konfiguration: Debug Win32 ------
    1>  MySql2.cpp
    1>MySql2.obj : error LNK2028: Nicht aufgelöstes Token (0A00005B) ""extern "C" void __stdcall mysql_close(struct st_mysql *)" (?mysql_close@@$$J14YGXPAUst_mysql@@@Z)", auf das in Funktion ""int __clrcall main(cli::array<class System::String ^ >^)" (?main@@$$HYMHP$01AP$AAVString@System@@@Z)" verwiesen wird.
    1>MySql2.obj : error LNK2028: Nicht aufgelöstes Token (0A00005C) ""extern "C" char const * __stdcall mysql_error(struct st_mysql *)" (?mysql_error@@$$J14YGPBDPAUst_mysql@@@Z)", auf das in Funktion ""int __clrcall main(cli::array<class System::String ^ >^)" (?main@@$$HYMHP$01AP$AAVString@System@@@Z)" verwiesen wird.
    1>MySql2.obj : error LNK2028: Nicht aufgelöstes Token (0A00005D) ""extern "C" void __stdcall mysql_free_result(struct st_mysql_res *)" (?mysql_free_result@@$$J14YGXPAUst_mysql_res@@@Z)", auf das in Funktion ""int __clrcall main(cli::array<class System::String ^ >^)" (?main@@$$HYMHP$01AP$AAVString@System@@@Z)" verwiesen wird.
    1>MySql2.obj : error LNK2028: Nicht aufgelöstes Token (0A00005F) ""extern "C" char * * __stdcall mysql_fetch_row(struct st_mysql_res *)" (?mysql_fetch_row@@$$J14YGPAPADPAUst_mysql_res@@@Z)", auf das in Funktion ""int __clrcall main(cli::array<class System::String ^ >^)" (?main@@$$HYMHP$01AP$AAVString@System@@@Z)" verwiesen wird.
    1>MySql2.obj : error LNK2028: Nicht aufgelöstes Token (0A000060) ""extern "C" struct st_mysql_res * __stdcall mysql_store_result(struct st_mysql *)" (?mysql_store_result@@$$J14YGPAUst_mysql_res@@PAUst_mysql@@@Z)", auf das in Funktion ""int __clrcall main(cli::array<class System::String ^ >^)" (?main@@$$HYMHP$01AP$AAVString@System@@@Z)" verwiesen wird.
    1>MySql2.obj : error LNK2028: Nicht aufgelöstes Token (0A000061) ""extern "C" int __stdcall mysql_query(struct st_mysql *,char const *)" (?mysql_query@@$$J18YGHPAUst_mysql@@PBD@Z)", auf das in Funktion ""int __clrcall main(cli::array<class System::String ^ >^)" (?main@@$$HYMHP$01AP$AAVString@System@@@Z)" verwiesen wird.
    1>MySql2.obj : error LNK2028: Nicht aufgelöstes Token (0A000062) ""extern "C" struct st_mysql * __stdcall mysql_real_connect(struct st_mysql *,char const *,char const *,char const *,char const *,unsigned int,char const *,unsigned long)" (?mysql_real_connect@@$$J232YGPAUst_mysql@@PAU1@PBD111I1K@Z)", auf das in Funktion ""int __clrcall main(cli::array<class System::String ^ >^)" (?main@@$$HYMHP$01AP$AAVString@System@@@Z)" verwiesen wird.
    1>MySql2.obj : error LNK2028: Nicht aufgelöstes Token (0A000063) ""extern "C" struct st_mysql * __stdcall mysql_init(struct st_mysql *)" (?mysql_init@@$$J14YGPAUst_mysql@@PAU1@@Z)", auf das in Funktion ""int __clrcall main(cli::array<class System::String ^ >^)" (?main@@$$HYMHP$01AP$AAVString@System@@@Z)" verwiesen wird.
    1>MySql2.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""extern "C" void __stdcall mysql_close(struct st_mysql *)" (?mysql_close@@$$J14YGXPAUst_mysql@@@Z)" in Funktion ""int __clrcall main(cli::array<class System::String ^ >^)" (?main@@$$HYMHP$01AP$AAVString@System@@@Z)".
    1>MySql2.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""extern "C" char const * __stdcall mysql_error(struct st_mysql *)" (?mysql_error@@$$J14YGPBDPAUst_mysql@@@Z)" in Funktion ""int __clrcall main(cli::array<class System::String ^ >^)" (?main@@$$HYMHP$01AP$AAVString@System@@@Z)".
    1>MySql2.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""extern "C" void __stdcall mysql_free_result(struct st_mysql_res *)" (?mysql_free_result@@$$J14YGXPAUst_mysql_res@@@Z)" in Funktion ""int __clrcall main(cli::array<class System::String ^ >^)" (?main@@$$HYMHP$01AP$AAVString@System@@@Z)".
    1>MySql2.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""extern "C" char * * __stdcall mysql_fetch_row(struct st_mysql_res *)" (?mysql_fetch_row@@$$J14YGPAPADPAUst_mysql_res@@@Z)" in Funktion ""int __clrcall main(cli::array<class System::String ^ >^)" (?main@@$$HYMHP$01AP$AAVString@System@@@Z)".
    1>MySql2.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""extern "C" struct st_mysql_res * __stdcall mysql_store_result(struct st_mysql *)" (?mysql_store_result@@$$J14YGPAUst_mysql_res@@PAUst_mysql@@@Z)" in Funktion ""int __clrcall main(cli::array<class System::String ^ >^)" (?main@@$$HYMHP$01AP$AAVString@System@@@Z)".
    1>MySql2.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""extern "C" int __stdcall mysql_query(struct st_mysql *,char const *)" (?mysql_query@@$$J18YGHPAUst_mysql@@PBD@Z)" in Funktion ""int __clrcall main(cli::array<class System::String ^ >^)" (?main@@$$HYMHP$01AP$AAVString@System@@@Z)".
    1>MySql2.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""extern "C" struct st_mysql * __stdcall mysql_real_connect(struct st_mysql *,char const *,char const *,char const *,char const *,unsigned int,char const *,unsigned long)" (?mysql_real_connect@@$$J232YGPAUst_mysql@@PAU1@PBD111I1K@Z)" in Funktion ""int __clrcall main(cli::array<class System::String ^ >^)" (?main@@$$HYMHP$01AP$AAVString@System@@@Z)".
    1>MySql2.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""extern "C" struct st_mysql * __stdcall mysql_init(struct st_mysql *)" (?mysql_init@@$$J14YGPAUst_mysql@@PAU1@@Z)" in Funktion ""int __clrcall main(cli::array<class System::String ^ >^)" (?main@@$$HYMHP$01AP$AAVString@System@@@Z)".
    1>D:\Visual Studio 2010\Projects\Test\MySql2\Debug\MySql2.exe : fatal error LNK1120: 16 nicht aufgelöste externe Verweise.
    ========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========
    


  • Tausche ein

    #pragma comment( lib, "mysqlclient.lib" )
    

    gegen

    #pragma comment( lib, "libmysql.lib" )
    

    BTW: Ich seh' erst jetzt, daß ich mich ins C++/CLI-Forum verirrt hab'... Machst Du das mit Absicht!?



  • Die änderung löst das Problem nicht, habe so den skript:

    // MySql.cpp: Hauptprojektdatei.
    
    #pragma comment( lib, "libmysql.lib" )
    //#pragma comment (lib,"advapi32")
    //#pragma comment (lib,"wsock32")
    
    #include "stdafx.h"
    #include <my_global.h>
    #include <mysql.h>
    
    using namespace System;
    
    int main(array<System::String ^> ^args)
    {
    
        MYSQL *conn;
        MYSQL_RES *res;
        MYSQL_ROW row;
        char *server = "127.0.0.1";
        char *user = "root";
        char *password = "++++";
        char *database = "test";
        char query[] = "SHOW VARIABLES";
    
        /* init mysql */
        conn = mysql_init(NULL);
    
        /* connect to database */
        if ( mysql_real_connect(conn, server, user, password, database, 0, NULL, 0) )
        {
            /* execute query
            mysql_query gibt 0 zurück
            wenn alles ok ist
            */
            if ( !mysql_query(conn, query))
            {
                /* Result abholen */
                res = mysql_store_result(conn);
                /* Result durchlaufen */
                while ((row = mysql_fetch_row(res)) != NULL)
                {
                    OutputDebugStringA(row[0]);
                    OutputDebugStringA("=");
                    OutputDebugStringA(row[1]);
                    OutputDebugStringA("\n");
                }
                /* Result wieder freigeben */
                mysql_free_result(res);
            }
            else
            {
                OutputDebugStringA("Query failed! ");
                OutputDebugStringA(mysql_error(conn));
                OutputDebugStringA("\n");
            }
        }
        else
        {
            OutputDebugStringA("Connection failed! ");
            OutputDebugStringA(mysql_error(conn));
            OutputDebugStringA("\n");
        }
    
        /* close connection */
        mysql_close(conn);
    }
    

    Wie meinst du das ob ich das mit Absicht mache?



  • Niklasg schrieb:

    Die änderung löst das Problem nicht, habe so den skript:

    Linkt und läuft bei mir mit einem bis auf Include- und Libraryverzeichnisse unberührten C++/CLI-Projekt in CS 2010 tadellos. Schmeiß das Projekt weg, und versuchs in einem jungfräulichen nochmal.

    Niklasg schrieb:

    Wie meinst du das ob ich das mit Absicht mache?

    Ob Du absichtlich C++/CLI benutzt... ?



  • Erst wenn man die Datei includet hat werden die Fehlermeldungen angezeigt.

    Warum sollte ich kein C++/CLI benutzen?



  • Niklasg schrieb:

    Erst wenn man die Datei includet hat werden die Fehlermeldungen angezeigt.

    Bahnhof. Welche Datei wo inkludiert? Welche Fehlermeldungen?

    Niklasg schrieb:

    Warum sollte ich kein C++/CLI benutzen?

    Gegenfrage: Warum benutzt Du nicht C++ oder C#? Warum ausgerechnet C++/CLI?



  • Ich habe schon mehrmals ein neues Projekt angelegt, was aber nichts gebracht hat. Die Fehlermeldungen sind immer noch die alten.

    Ich nehme C++/CLI weil ich damals mir ein Buch gekauft habe und somit darauf kam. Aber auch wenn ich den Skript in einem reinem C++ Projekt anlege kommt die gleiche Fehlermeldung.



  • Niklasg schrieb:

    Ich habe schon mehrmals ein neues Projekt angelegt, was aber nichts gebracht hat. Die Fehlermeldungen sind immer noch die alten.

    Ich hab' Deinen Code genommen, in ein neues Projekt geworfen, die Include- und Libraryverzeichnisse für MySQL in den Projekteinstellungen eingetragen, die libmysql.dll ins Debug-Verzeichnis des Projekts kopiert, [Strg] + [F5] gedrückt, und voila!

    Was Du mit "Erst wenn man die Datei includet hat werden die Fehlermeldungen angezeigt." meinst versteh' ich immer noch nicht.

    Niklasg schrieb:

    Ich nehme C++/CLI weil ich damals mir ein Buch gekauft habe und somit darauf kam.

    Ok, das ist IMHO kein guter Grund für C++/CLI. Aber vielleicht sehen das andere anders. 😕 ... glaub' ich aber nicht. 😃



  • Welche MySQL Version benutzt du?
    Diesen Satz verstehe ich selbst nicht 😃 war in dem Moment falsch formuliert.

    Naja jeder hat andere Vorlieben 😉



  • Niklasg schrieb:

    Welche MySQL Version benutzt du?

    Kann ich Dir erst um frühestens 9 genau sagen. Aber innerhalb 5.x sollt das für Dein Problem ziemlich wurscht sein...



  • Ich benutze die Version 5.1.59 , und als IDE benutze ich den Microsoft Visual C++ 2010 Editor. Ich habe eine Standart CLR-Konsolenanwendung erstellt und den Code reinkopiert. Dann habe ich die Linker- und Incude-Verzeichnisse angepasst und habe wie im code die *.lib hnzugefügt.
    Aber leider kommt immer die gleiche Fehlermeldung.



  • Also ich tippe immer noch darauf, daß du nicht den richtigen Pfad angegeben hast (oder aber daß dort nicht die richtige LIB-Datei liegt). Hast du das nochmal genau geprüft?

    Edit: Und so wie Swordfish schon geschrieben hat, nimm ein natives C++ Projekt (Konsolenanwendung).


Anmelden zum Antworten