Mysql Verbindung mit Visual Studio



  • Hallo,

    ich versuche gerade dieses Tutorial durchzusetzen.

    http://c3r0.de/2008/07/26/mysql_vs_project_cpp/

    Ich verwende Microsoft Visual C++ 2010 Express
    Ich habe die mysql-5.5.30 Version

    Ich habe eine leeres Konsolenprojekt geöffnet.

    Die erste unstimmigkeit hatte ich im Punkt 2. Ich habe dort C:\mysql\mysql-5.5.30-32\libmysql eingetragen, da der Ordner lib so nicht existiert.

    Im Linker habe ich die libmysql.lib eingebunden.

    Nun der Code:

    #include "stdafx.h"
    #include <winsock.h>
    #include <my_global.h>
    #include <mysql.h>
    
    void CTestDlg::OnBnClickedQuerytest()
    {
        MYSQL *conn;
        MYSQL_RES *res;
        MYSQL_ROW row;
        char *server = "127.0.0.1";
        char *user = "root";
        char *password = "test";
        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);
    }
    

    Da wird mir erstmal das erste #include rot markiert und in der Zeile 6 wir mir CTestDlg auch rot markiert. Wenn ich das erste include rausnehme. Mache ich da jetzt grundsätzlich was falsch?



  • dalyay schrieb:

    Mache ich da jetzt grundsätzlich was falsch?

    na das CTestDlg::OnBnClickedQuerytest so nach MFC aussieht und Microsoft Visual C++ 2010 Express kein MFC unterstützt, also musste das so anpassen das es ein reines Konsolenprojekt wird.



  • Hat jemand ein tutorial, dass für Microsoft Visual C++ 2010 Express funktioniert? Als Konsolenanwendung.



  • ...



  • Ich denke, ich mache da etwas grundsätzlich falsch. Habe den Cod emit meinen Zugangsdaten verwendet.

    #include <my_global.h>
    #include <mysql.h>
    
    int main(int argc, char **argv)
    {
    
      MYSQL *conn;
      MYSQL_RES *result;
      MYSQL_ROW row;
      int num_fields;
      int i;
    
      conn = mysql_init(NULL);
      mysql_real_connect(conn, "localhost", "zetcode", "passwd", "testdb", 0, NULL, 0);
    
      mysql_query(conn, "SELECT * FROM writers");
      result = mysql_store_result(conn);
    
      num_fields = mysql_num_fields(result);
    
      while ((row = mysql_fetch_row(result)))
      {
          for(i = 0; i < num_fields; i++)
          {
              printf("%s ", row[i] ? row[i] : "NULL");
          }
          printf("\n");
      }
    
      mysql_free_result(result);
      mysql_close(conn);
    
    }
    

    Da bekomme ich den Fehler

    1>------ Erstellen gestartet: Projekt: sql, Konfiguration: Debug Win32 ------
    1>main.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_mysql_close@4" in Funktion "_main".
    1>main.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_mysql_free_result@4" in Funktion "_main".
    1>main.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_mysql_fetch_row@4" in Funktion "_main".
    1>main.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_mysql_num_fields@4" in Funktion "_main".
    1>main.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_mysql_store_result@4" in Funktion "_main".
    1>main.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_mysql_query@8" in Funktion "_main".
    1>main.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_mysql_real_connect@32" in Funktion "_main".
    1>main.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_mysql_init@4" in Funktion "_main".
    1>D:\Visual Studio 2010\Projects\sql\Debug\sql.exe : fatal error LNK1120: 8 nicht aufgelöste externe Verweise.
    ========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========
    


  • ...



  • Das habe ich.

    http://s14.directupload.net/images/130218/temp/st5n8km3.png

    __EDIT__

    so, habe das ganze Projekt nochmal gelöscht und neu angefangen.

    Es scheint als wäre ich einen kleinen schritt weiter.

    #include<iostream>
    #include <windows.h>
    #include <stdio.h>
    #include <mysql.h>
    
    using namespace std;
    MYSQL mysql;
    MYSQL * conn ;  
    
    int main()
    {
    
      mysql_init( &mysql ) ;
    
      conn = mysql_real_connect(  &mysql,
                                  "xx", //host
                                  "xx", //user
                                  "xx", //pass      
                                  "xx", //db
    							  3306, // port
                                  0,    // unix_socket (not in use)
    							  0 ) ; // client flag:  usually 0
    
      if( conn == NULL )
      {
        cout <<"Keine Verbindung zur Datenbank" <<endl;
    
      }
      else
      {
       cout <<"Erfolgreich verbunden" <<endl;
    
      }
      system("pause");
    
       mysql_close( conn ) ;
      return 0;
    }
    

    Wenn ich da jetzt meine Zugangsdaten eintrage, dann bekomme ich keine Verbindung. "Keine Verbindung zur Datenbank". Wenn ich aber die identischen Zugangsdaten in PHP verwende, dann bekomme ich eine Verbindung. Also sind die zugnagsdaten richtig. Somit muss das an dem Skript liegen. Ich verwende MySQL5 von einem Webhoster. Woran könnte das liegen?

    __EDIT 2__

    Liegt an dem Webserver, der lässt keine Verbindung von aussen zu. Habe jetzt ein wenig gegoogelt und bin auf SSH-Tunnel gestossen. So soll das gehen. aber wie genau geht das?



  • Hat jemand evtl. ein Beispielcode wie ich openssh verwenden kann? Im Internet ist das ziemlich zäh etwas zu finden.



  • Ich glaube kaum das du einen Webhoster finden wirst der mysql von aussen zulässt.
    Es gibt da diverse PHP zu mysql Brücken.
    MysqlFactory ist evtl. eine schnelle Lösung für dich.
    Ansonsten gameserver für 30€ pro Jahr mieten und mysql installieren ...



  • Hallo,

    ich meinte eig. ein Beispiel oder tutorial wie man das in C++ machen könnte.



  • Doch Du bekommst Antwort im Internet:
    Datenbankverbindung mit MySql und Visual Studio
    http://dev.mysql.com/doc/refman/5.1/en/connector-cpp-apps-windows-visual-studio.html
    Von dort kann man dann das durchs Referenzmanual navigieren.



  • Das ist aber ohne SSH. Oder übersehe ich da was?

    Die verbindung zum Netzwerkinternen Datenbank geht. Es scheitert nur an der Onlinedatenbank im Netz, weil die nicht von ausser erreichbar ist. Deswegen wird im Internet sehr SSH Tunnel empfohlen.

    Nur wie amn die am Ende herstellt mit C++ das ist mir noch nicht ganz klar.


Anmelden zum Antworten