Verbindung zu Datenbank via C++ und ODBC



  • ich habe eine Datenbank in MS SQL Server 2005. Betriebssystem ist Windows XP Prof., alles auch aktuell gehalten mit den Updates. Geschrieben werden soll ein weiteres Programm für weitere andere Logfiles, die in die selbe Datenbank geschrieben werden sollen. Eis passiert im Visual Studio 2008 in C++. Die Datenbank läuft local auf dem selben PC und wird von einem anderen Programm/Dienst schon genutzt und schreibt dort Daten rein. Aus diesem Grund brauche ich die Anbindung per ODBC (also kein SQL.API, was scheinbar modernen, neuer und einfacher ist) , Treiber etc. sind installiert, da ja wie gesgat ein anderes Programm shcon läuft und fleißig Log-Daten in diese Datenbank schreibt.
    Mein Problem ist nun, wie bekomme ich die Verbindung zur Datenbank hin, um meine Daten dort reinzuschreiben? Für ODBC habe ich gefunden, dass es die Klassen CDatabase und CRecordSet gibt.
    (eine der Quellen:Daten aus ODBC- Datenbanken abrufen)
    CRecordset, zum handeln wird auch gut erklärt etc. sollte man schaffen mit umzugehen aber: Problem: CDataBase soll zum herstellen der Verbindung sein. Nicht nur bei der angegeben Quelle, sondern auch bei anderen Quellen (z.B. Visual Studio C++ Buch) steht, man soll für die Erstellung und korrekte Verbindung via CDatabase den Anwendungsassistenten nutzen.
    Sowas gibts in Visual Studio 2008? Wo? Oder was ist damit gemeint? Und wenn ich neues Projekt anlege, gibt es unter C++ kein Datenbankprojekt, nur für C#, was allerdings nicht vorgesehen ist zu nehmen, da große Teile des Programms shcon in C++ existieren.

    Ich hoffe mir kann jemand helfen, wie ich einfach eine Verbindung zu meiner SQL Server Datenbank schaffen kann in C++ mit ODBC.

    Anmerkung:
    Wurde auch in einem MS SQL Forum gepostet, da mir noch niemand helfen konnte und es sich ja um ein C++ Problem handelt, frage ich hier ebenfalls!
    Link: http://www.mcseboard.de/ms-sql-server-forum-81/verbindung-datenbank-via-c-odbc-187035.html[cpp]



  • Hallo,

    CDatabase und CRecordSet sind MFC-Klassen. Hast du denn Visual Studio Professional (oder höher)? Denn in der Express-Version gibt es keine MFC.

    Probiere aber mal ob du http://www.tidytutorials.com/2009/08/connecting-to-sql-server-using-c-odbc.html bei dir zum Laufen kriegst.

    Ich verstehe trotzdem nicht, warum du unbedingt ODBC benutzen willst, denn nur weil das eine Programm dies benutzt, heißt es noch lange nicht, daß jedes andere Programm auch diesen Weg benutzen muß, um auf die Daten (der Datenbank) zuzugreifen bzw. weitere Daten dort hinzuzufügen.

    Mit C++/CLI und dem .NET-Framework kannst du also auch per ADO auf diese MS SQL Server-Datenbank zugreifen (mittels der Klassen SqlConnection, SqlCommand etc. aus dem System.Data.SqlClient Namensbereich).
    Und auch C++ brauchst du dafür nicht unbedingt einsetzen, sondern kannst das für .NET besser zu verwendende C# benutzen (du schreibst zwar, daß bereits ein großer (nativer?) C++ Teil existiert, aber ein Programm kann ja aus verschiedenen DLLs etc. bestehen).



  • Hallo,

    ich glaube du bringst da einiges durcheinander.

    jo40481 schrieb:

    und es sich ja um ein C++ Problem handelt, frage ich hier ebenfalls!

    Dieses Unterforum ist für C++/CLI das ist eigentlich nur als Interface-Sprache zwischen .net und C++ gedacht. Datenbank-Anwendungen für .net würde man eher in C# machen, da du das nicht willst, ist C++/CLI erst recht nichts für dich.

    Die Klassen, deren Namen du da zitierst, sind Teil der MFC, dafür gibt es weiter oben ein eigenes Unterforum. Ist dein bestehendes C++ Programm denn ein MFC-Programm ? Gehören die Assistenten, von denen dein Buch handelt, vielleicht zu Visual C++ 6 (1998) ?

    ODBC selber hat eine C-API, die kann man auch direkt in C++ nutzen. Doku gibt es hier:
    http://msdn.microsoft.com/en-us/library/windows/desktop/ms714562%28v=vs.85%29.aspx



  • okay... dann bin ich im Falschen Forum... ich hatte bisher Grundlagen C++ und Grundlagen SQL, also in beiden alles andere als ein Profi! Das die beiden von mir genannten Klassen zu MFC gehören, war mir nicht bewusst, sonst hätte ich da gepostet, also Entschuldigung für falsches Unterforum!!

    C# hab ich noch nie verwendet und der Code um die Log-Daten zu formatieren liegt eben in C++ Code vor, (warum auch immer legt man die Daten in der Datenbank als binary also hex ab, obwohl man die als int und strings bekommt.. aber da hab ich keinen Einfluss drauf!)

    Und es handelt sich um das Visual Studio 2008 Professional.

    Das mit ODBC war eben Festlegung des Aufgabenstellers, da schon verwendet...

    Edit:
    Und vielen Dank den Antworten, werde mir ersteinmal eure Links ansehen und probieren!



  • Dieser Thread wurde von Moderator/in Jochen Kalmbach aus dem Forum C++/CLI mit .NET in das Forum MFC (Visual C++) verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Rückmeldung meinerseits:

    Die Verbindung von den tidytutorials funktioniert überhaupt nicht, außerdem schrecken mich die dort verwendeten gotos extrem ab, dachte sowas ist extrem verpönt bei objektorientierter Programmierung?!

    Der Gedanke ODBC wurde verworfen... also Anbindung egal.
    Habe noch diese Seite gefunden http://www.sqlapi.com/, da schaut sehr sehr vielversprechend. Allerdings bleibt die ganz dumme Frage, wohin mit den dlls? Kommen die nun in den win32 Ordner oder mit in das Projekt des Visual Studios?

    edit1:
    Egal, wo ich die .dlls etc. einfüge, er meckert immer *The system cannot find the file spcified*

    edit2:
    das habe ich hinbekommen, man muss die in das Projekt einfügen, also unter Projekte --> Eigenschaften --> c++ --> includes bzw. Links die .libs



  • Habe nun also selbiges Problem wie hier http://www.c-plusplus.net/forum/210582-full beschrieben, da gabs am Ende auch keine Antworten. Libs und Header sind funktionieredn eingebunden...

    edit:
    Fehler gefunden! Die SQLAPI.lib und die SQLAPI.dll müssen zusätzlich in den Porjekt-Ordner kopiert werden und in das Projekt eingefügt!

    Nur einfügen, ohne auch in den Ordner des Projekts zu verscheiden funktioniert seltsamerweise nicht!!


Log in to reply