2015-08-07 4 views
8

Ich denke, ich habe alle Voraussetzungen für die Einstellung Verbindung und Abfrage SQL Server Datenbank, da ich das von meinem Python Code tun kann. Und das mache ich so:Wie man eine einfache Anfrage an SQL Server von C++ auf Linux anschließt und ausführt

#1. Set connection using pyodbc library 

db = pyodbc('DRIVER=FreeTDS;SERVER='+host+';PORT='+port+';DATABASE='+ \ 
      db_name+ ';UID='+ user+ ';PWD='+ pwd+ ';TDS_Version=7.0;ClientCharset=UTF8;') 

#2. List all table names in a particular database 

cursor = db.cursor() 
cursor.execute('SELECT TABLE_NAME FROM ' + db_name + '.INFORMATION_SCHEMA.Tables WHERE ' + \ 
'TABLE_TYPE=\'BASE TABLE\'') 
res = cursor.fetchall() 

Und ich bin fertig. Jetzt möchte ich dasselbe implementieren, mit C++. Ich habe einige Beispielcodes wie this gesehen, aber sie sehen furchtbar schrecklich mit fünf if ineinander verschachtelt. Aber ich brauche etwas wirklich einfaches, unter Berücksichtigung, dass wahrscheinlich alle Voraussetzungen erfüllt sind (wenn nicht, bitte anweisen, was noch installiert werden soll).

Das letzte, was ich wissen möchte, ist in der Tat, wie dieses Programm zu kompilieren (ich mache dies normalerweise mit g++). Und bitte poste keine einzigen Verweise auf FreeTDS und ODBC - ich habe sie schon gesehen. Was ich in diesem Stadium will, ist ein kleines minimiertes Beispiel für die Ausführung der einfachsten in der Welt Abfrage (wie ich es oben getan habe, mit Python).

+0

Ich glaube, Sie besser dran sind für eine C++ SQL-Client-Bibliothek suchen. Etwas wie http://otl.sourceforge.net/otl3_intro.htm – marom

+0

Warum sollte ich 'FreeTDS' nicht verwenden, wenn es bereits in meinen' Python' Programmen funktioniert? – Jacobian

+0

Nun, ich kenne diese Bibliothek nicht, aber wenn C++ Bindings haben Sie können. – marom

Antwort

5

Dies ist nicht mit Freedds-Treiber von Unixodbc getestet. So stelle ich unixodbc mit postgres oder mysql ein. http://k3ut0i.github.io/linux/2015/08/09/odbc-setup-linux.html

Die globale Aufstellung von Treiber und Datenquellen für ODBC sind in /etc/odbc.ini und /etc/odbcinst.ini. Bei einigen Betriebssystemen können diese Dateien leer oder unterschiedlich sein. Hier sind meine Konfigurationsdateien.

Treiber, Bibliotheken in /etc/odbcinst.ini Datei.

[MySQL] 
    Description  = ODBC driver for mariaDB 
    Driver   = /usr/lib/libmyodbc.so 
    Setup   = /usr/lib/libmyodbc5S.so 
    FileUsage  = 1 

die Pyodbc Funktion in der Python-Datei ist eine Datenquelle in /etc/odbc.ini Datei äquivalent.

[mariadb-connector] 
    Description  = connection to test database for mariadb 
    Driver   = MySQL 
    Database  = test 
    Server   = 127.0.0.1 
    UserName  = keutoi 
    Trace   = No 
    Port   = 3306 

Teil des Codes, der verbindet und abfragt. Ich habe gerade von deinem Link angefangen und es aufgeräumt.

Komplettes Beispiel ist here. Kompilieren Sie mit g++ file.cc -lodbc

+0

Danke! Ich habe es noch nicht getestet, aber es sieht sehr vielversprechend aus. – Jacobian

1

Dies scheint ziemlich einfaches Beispiel ohne sehr Wenns.

http://dev.mysql.com/doc/connector-cpp/en/connector-cpp-examples-complete-example-1.html

+0

Oh, mein Gott! Es scheint, als würden die Leute versuchen, Fragen zu beantworten, bevor sie sie lesen. Schau - der Titel der Frage bezieht sich auf SQL Server. Ich frage nicht nach MongoDB oder Postgres oder Oracle oder irgendeiner anderen Datenbank. Also, hier einen Verweis auf Mysql-Connector "mysql_connection.h" hat absolut keinen Sinn. Es tut uns leid. – Jacobian

1

Ihr Bedarf Microsoft SQL Server ODBC-Treiber für Linux.

Siehe großer MSDN-Artikel https://technet.microsoft.com/ru-ru/library/Hh568454(v=SQL.110).aspx

Verwendung von C++ Bibliothek Beispiel: http://blogs.msdn.com/b/sqlblog/archive/2012/01/26/use-existing-msdn-c-odbc-samples-for-microsoft-linux-odbc-driver.aspx

+0

"Und bitte, poste keine einzigen Verweise auf FreeTDS und ODBC - ich habe sie schon gesehen." - Das ist ein Zitat aus meiner Frage. Sie verweisen nicht nur auf ODBC, Sie verweisen sogar auf das gleiche Beispiel, das ich in meiner Frage verwende. – Jacobian

Verwandte Themen