Embedded SQL in C++ ???



  • Wie kann ich ein sql Statement wie "create table Testtabelle... " in meinen c++ Quellcode einbauen?

    Gruß AK



  • Nicht mit Standard C++, weil Standard C++ kennt kein SQL.
    Ich verschiebe den thread mal in Rund um die Programmierung Forum. Ist C++ wirklich so schlecht?



  • Es handelt sich um einen MS SQL Server. Servername: Prada ,Datenbankname: MTOP

    gewünschte sql- Anweisung :
    create table paisyma (ID integer,Kostenstelle varchar(20),Mitarbeiteranzahl varchar(14))

    Es wäre toll wenn jemand einen Quelltext veöffentlichen könnte.





  • @kingruedi

    bei einem ms sql server wird er mit mysql nicht weit kommen...

    eher dann mit odbc..denk ich mal..
    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/odbcsql/od_6_0oview_8sc3.asp

    #include <windows.h>
    #include <stdlib.h>
    #include <stdio.h>
    #include <sql.h>
    #include <sqlext.h>
    
    #define SMALLER_FIRST 1     //Use this to determine which parameter is bound first.
                    //Set to 1 to reproduce the failure.
    
    void main(void)
    {   
        SQLHANDLE henv;
        SQLHANDLE hdbc;
        SQLHANDLE hstmt;
        RETCODE rc;
    
        char Statement[50] = {"select * from adressentbl"};     
        char dsn[10] = {"elise"};
        char user[5] = {""};
        char pass[5] = {""};
    
        char m_titleid[10] = {"\0"};
        char param2[22] = {"The Gourmet Microwave"};
        char param1[14] = {"Net Etiquette"};
        param1[13] = '\0';
        param2[21] = '\0';
    
        long sqlnts = SQL_NTS;
        long m_bytesRet = SQL_NTS;
    
        rc = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv);
    
        rc = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, 
                (SQLPOINTER) SQL_OV_ODBC3, SQL_IS_UINTEGER);
    
        rc = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);
    
        rc = SQLConnect(hdbc, (SQLCHAR *)dsn, SQL_NTS, (SQLCHAR *) user, SQL_NTS, 
                (SQLCHAR *) pass, SQL_NTS);
    
        rc = SQLAllocHandle(SQL_HANDLE_STMT,hdbc,&hstmt);
    
        rc = SQLPrepare(hstmt, (SQLCHAR *)Statement, SQL_NTS);
    
    #if SMALLER_FIRST   //Put smaller parameter first.
        rc = SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_WCHAR, 13, 0,
                (SQLCHAR*)param1, 13, &sqlnts); 
    #else
        rc = SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_WCHAR, 21, 0,
                (SQLCHAR*)param2, 21, &sqlnts); 
    #endif
    
        rc = SQLExecute(hstmt);
    
        rc = SQLFetch(hstmt);
    
        if (rc == SQL_NO_DATA_FOUND)
        {
            printf("Parameter #1 (%s) returned no data.\n", param1);
            SQLFreeStmt(hstmt, SQL_DROP);
            SQLDisconnect(hdbc);
            SQLFreeHandle(SQL_HANDLE_DBC, hdbc);
            SQLFreeHandle(SQL_HANDLE_ENV, henv);
            exit(0);
        }
        else
        {
            SQLGetData(hstmt, 1, SQL_C_CHAR, m_titleid, 10, &m_bytesRet);
            printf("Title_id for parameter (%s) = %s\n", SMALLER_FIRST?param1:param2, m_titleid);
        }
    
        rc = SQLFreeStmt(hstmt, SQL_CLOSE);
    
        memset(m_titleid,0,10);
    
    #if SMALLER_FIRST   //Put larger parameter last.
        rc = SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_WCHAR, 21, 0,
                (SQLCHAR*)param2, 21, &sqlnts); 
    #else
        rc = SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_WCHAR, 13, 0,
                (SQLCHAR*)param1, 13, &sqlnts); 
    #endif
    
        rc = SQLExecute(hstmt);
        rc = SQLFetch(hstmt);
    
        if (rc == SQL_NO_DATA_FOUND)
        {
            printf("Parameter #2 (%s) returned no data.\n", param2);
            SQLFreeStmt(hstmt, SQL_DROP);
            SQLDisconnect(hdbc);
            SQLFreeHandle(SQL_HANDLE_DBC, hdbc);
            SQLFreeHandle(SQL_HANDLE_ENV, henv);
            exit(0);
        }
        else
        {
            SQLGetData(hstmt, 1, SQL_C_CHAR, m_titleid, 10, &m_bytesRet);
            printf("Title_id for parameter (%s) = %s\n", SMALLER_FIRST?param2:param1, m_titleid);
        }
    
        rc = SQLFreeStmt(hstmt, SQL_CLOSE);
        rc = SQLDisconnect(hdbc);
        SQLFreeHandle(SQL_HANDLE_DBC, hdbc);
        SQLFreeHandle(SQL_HANDLE_ENV, henv);
    }
    

    ps: das ist jetzt konsole und einfach mal einen sql befehl rübergeworfen und noch so zeugs.. , ich weiß aber nicht, ob du winapi mit fenster, mfc oder sonstiges machst ..
    erstmal nur als ansatz gedacht..

    [ Dieser Beitrag wurde am 21.01.2003 um 20:15 Uhr von elise editiert. ]



  • Ich hab wohl ausversehen My SQL gelesen, dass sieht eben so ähnlich aus 😞 naja MySQL ist aber auch schön 😉



  • jo

    gefällt mir auch besser 😉



  • Da sich beide im Grunde an Standards (SQL) halten ist die Seite nicht so falsch da hier auch auf SQL-Syntax eingegenagen wird.

    Wenn ich auf den MS SQL eine abfrage schreibe verwende ich sehr oft Access um den Syntax zu prüfen.



  • nur das mysql einige features (meines wissens) immernoch nicht hat.. aber ich joine auch gerne, wenn es nicht anders geht. sogar logischer, finde ich 🙂

    aber klar, die grundsyntax mit dem "janzen select und create zeugs" is diesselbe (man merkt, ich mag datenbanken nur peripher .. )



  • MYSQL hat diese "Features" aus einem guten Grund nicht.
    SUBSELECTS kann man JOINEN
    Brauchen die Features Resourcen und belasten somit die Performance und die braucht man im WEB.
    Die Macher von MYSQL sind nicht so wie z.B. MS !

    "Baue viele Features ein die kein Mensch derzeit braucht und schaue deshalb weniger auf die Bugs"

    Wenn die Anwender z.B. SUBSELECT brauchen und die NAchfrage ist groß dann bauen sie das auch ein.
    Vieles wird es aber bereits in V4 geben.



  • Danke schonmal an alle für die Tips, wenn Ihr noch ein paar hilfreiche Links habt wäre ich euch sehr verbunden.

    Gruß AK



  • Ich will das alles in einer Managed C++ Application (MS Visual.net) umsetzen.Es soll dann später noch mit einer ASP Oberfläche verbunden werden.



  • naja MySQL ist eben für den Speed, dafür kaum Features. Wer mehr Features haben will, nimmt doch eh SAP DB oder PostgreSQL im Open Source Bereich oder Oracle und IBM DB2 im kommerziellen Bereich.

    Obwohl der neue MySQL Server auch Subselects hat (siehe aktuelle iX)



  • Original erstellt von kingruedi:
    **naja MySQL ist eben für den Speed, dafür kaum Features. Wer mehr Features haben will, nimmt doch eh SAP DB oder PostgreSQL im Open Source Bereich oder Oracle und IBM DB2 im kommerziellen Bereich.

    Obwohl der neue MySQL Server auch Subselects hat (siehe aktuelle iX)**

    Meine Rede !

    Diese ganzen Funktionen sind in 90 % der Fälle sowieso nicht notwendig.
    Und MYSQL ist im TCO sicher einer der niedrigsten.

    [ Dieser Beitrag wurde am 24.01.2003 um 13:50 Uhr von Unix-Tom editiert. ]


Anmelden zum Antworten