Tutorial C++ Oracle Datenbank



  • Hallo,

    ich habe mir eine Konsolenanwendung in C++ programmiert um Daten zu empfangen. Diese möchte ich jetzt direkt auf eine Oracle Datenbank schreiben. Ich verzweifel jetzt schon fast da ich nichts richtiges finde dazu.
    Ich wäre über ein paar gute Tipps sehr dankbar oder ein paar gute Tutorials. Ich programmiere mit Visual Studio 2010 Pro.

    Danke

    Gruß





  • Vielleicht habe ich mich ein bisschen falsch ausgedrückt ^^ sorry. Die Datenbank besteht bereits. Ich meine jetzt natürlich programmiertechnisch wie ich Verbindung zur Datenbank aufnehme und dann in eine Table meine Daten schreiben kann.





  • Bekomme ich irgendwo die oci.h oder occi.h her? Wenn ich danach google dann finde ich diese nicht. Nur Projekte in denen sie benutzt wird.



  • SQLAPI++



  • Oracler schrieb:

    Bekomme ich irgendwo die oci.h oder occi.h her?

    Nur die Header werden wohl nicht reichen. In der DB-Installation sind die Header und Libs enthalten, ansonsten gibt es den Instant Client mit SDK bei Oracle (wo auch sonst?).

    Das hat aber alles nichts mit Fragen zu Standard C++ zu tun und gehört ins Datenbankforum.



  • Danke für die Infos.
    Ich nutze jetzt SQLAPI++.

    Ich nutze es jetzt in einer selbst erstellten Klasse -> Funktion. Nur komischerweise bekomme ich mehrere error LNK2019 beim erstellen.

    Einer lautet zum Beispiel:

    error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: virtual __thiscall SAConnection::~SAConnection(void)" (??1SAConnection@@UAE@XZ)" in Funktion "__catch$?send@DBSSend@@QAEXXZ$0".

    Ich habe es vorher in getestet in einem anderen Programm. Da ging es auch einwandfrei. Jetzt weiß ich aber nicht wo der Fehler liegt :-(.
    Die .lib 's sind alle richtig eingebunden würde ich sagen.

    Hier mal die Funktion der Klasse die ich erstellt habe mit der Function in der es auftritt.

    void DBSSend::send()
    
    SAConnection con;
    {
    	try
        {
    		con.Connect("127.0.0.1/XE","xxx","xxx", SA_Oracle_Client); // database name//  user name //password
    
            cout<<"Connected!"<<endl;
    
    		SACommand cmd(&con,"SELECT * FROM DEVICE_PARAMETER_SET");
    
    		cmd.setCommandText("insert into DEVICE_PARAMETER_SET(DEVICE_ID,P1_SET, P2_SET) values(:1, :2, :3");	
    
    		cmd.Param(1).setAsString() = value[0];
    		cmd.Param(2).setAsString() = value[1];
    		cmd.Param(3).setASString() = value[2];
    		cmd.Execute();
    
    		cout<<"Values insert . . . "<<endl;
    
                    con.Disconnect();	
    
        }
        catch(SAException &x)
        {
            // SAConnection::Rollback()
            // can also throw an exception
            // (if a network error for example),
            // we will be ready
            try
            {
                // on error rollback changes
                con.Rollback();
            }
            catch(SAException &)
            {
            }
            // print error message
            cout<<(const char*)x.ErrText()<<endl;
        }
    
    	con.Disconnect();
    }
    

    Hat es vielleicht ein Problem damit das es in einer anderen Funktion verwendet wird?



  • Oracler schrieb:

    Ich habe es vorher in getestet in einem anderen Programm. Da ging es auch einwandfrei. Jetzt weiß ich aber nicht wo der Fehler liegt :-(.
    Die .lib 's sind alle richtig eingebunden würde ich sagen.

    Genau das würde ich nicht sagen. In der Richtung würde ich nochmal suchen. Ein nicht aufgelöstes externes Symbol sagt doch genau, dass Du die libs nicht richtig eingebunden hast.


Anmelden zum Antworten