C++ SQL Verbindung ohne MFC
-
Dan Diggler schrieb:
Es handelt sich dabei um ein .NET Projekt (clr). Wenn ich mit dem "Klassenmanager" eine MFC Klasse hinzufügen möchte, geht das natürlich nicht (Kein MFC Projekt).
Was mache ich denn nun, gibt es eine Möglichkeit dem Projekt die MFC Unterstützung aufzuzwingen und anschließend per Assistent einfach die Verbinung zur DB herzustellen?
Oder soll ich ohne MFC arbeiten? Nur weiß ich dann nicht weiter!Warum willst du in einem CLR-Projekt, das mit Sicherheit eigene Wege hat, krampfhaft MFC einsetzen für das was du tun willst? Wenn du nicht weißt wie du die SQL-Datenbank mit .NET ansprichst, dann solltest du dich mit genau dieser Frage befassen, und nicht damit, wie du in .NET MFC-Funktionalität hineinzwingst, um damit die DB anzusprechen.
-
Dieser Thread wurde von Moderator/in pumuckl aus dem Forum C++ (auch C++0x) in das Forum C++/CLI mit .NET verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Danke theta. SQLAPI hat mich angesprochen, ist aber kommerziell, d.h. mit der trial werde ich nicht weit kommen.
Bei Poco sehe ich überhaupt nicht durch, werde dort förmlich erschlagen.Gibt es nicht gute Beispiele, die einen aufzeigen, wie man mit standard C++ eine Verbindung zur SQL DB aufbaut?
-
Dan Diggler schrieb:
Danke theta. SQLAPI hat mich angesprochen, ist aber kommerziell, d.h. mit der trial werde ich nicht weit kommen.
Bei Poco sehe ich überhaupt nicht durch, werde dort förmlich erschlagen.Gibt es nicht gute Beispiele, die einen aufzeigen, wie man mit standard C++ eine Verbindung zur SQL DB aufbaut?
Es gibt unter Windows die Möglichkeit, Datenbanken über die ODBC API anzusprechen, du kannst in der MSDN mal nach SQLxxxx Funktionen suchen. Brauchst aber den entsprechenden ODBC Treiber für dein DBMS. Möglicherweise ist der ODBC Zugriff auch langsamer als direkt über die API des DBMS zu gehen.
-
Also was jetzt .NET oder nicht?
Nicht mischen, das ist nicht empfehlenswert (http://www.c-plusplus.net/forum/263084)!Für .NET gibts Klassen für die DB Anbindung.
Andernfallse eben POCO via ODBC oder ein anderes Framework suchen.Edit
Gibt es nicht gute Beispiele, die einen aufzeigen, wie man mit standard C++ eine Verbindung zur SQL DB aufbaut?
Also Standard C++, dann POCO oder ähnlich.
-
Wenn ich bei .NET bleiben würde, hätte jemand vllt. ein TUT, oder Hilfestellung? Ich finde nichts Brauchbares. Was benötige ich denn? Wäre wirklich nett, wenn mir jemand helfen könnte, ich habe schon so viele Tage investiert und komme kaum voran.
-
Dan Diggler schrieb:
Was benötige ich denn?
Das hängt von der Datenbank ab. Die grundlegende Funktionalität ist in .net enthalten, insbesondere der Zugriff auf ODBC und OLE DB, sowie natürlich den SQL-Server.
Für andere Datenbanken muss dann eben deren ODBC-Treiber, OLE DB /ADO oder .net Provider installiert sein.
Dan Diggler schrieb:
Ich finde nichts Brauchbares.
Es gibt regalweise Bücher über Datenbankprogrammierung in VB.net und C#. Die verwenden die selben Klassen wie C++/CLI, abgesehen davon das C++/CLI kein LINQ kennt.
Dan Diggler schrieb:
ich habe schon so viele Tage investiert und komme kaum voran.
Das ist der große Vorteil von C++/CLI als Noobsprache. Man kann jede Menge Unsinn damit schreiben, aber die Komplexität der Sprache verhindert, dass er auch nur ansatzweise funktioniert.
C++/CLI dient dazu nativen C++ Code und die .net Welt zu verbinden. Sonst nichts.
-
Das ist der große Vorteil von C++/CLI als Noobsprache. Man kann jede Menge Unsinn damit schreiben, aber die Komplexität der Sprache verhindert, dass er auch nur ansatzweise funktioniert.
C++/CLI dient dazu nativen C++ Code und die .net Welt zu verbinden. Sonst nichts.
Das triffts irgendwie super. 100% Acknowledge!
-
Hallo
wäre jemand so nett und könnte mal drüber schaun. Ich weiß nich wo der Fehler liegt, er baut die Verbindung nicht auf. Ich nutze VS 2010 und SQL Server 2008.
Mit ODBC/MFC über den Assistenten, klappte es bereits. Aber das nutzt mir ja nichts.#include <windows.h> #include <stdio.h> #include <string.h> #include <odbcinst.h> #include <sql.h> #include <sqlext.h> #include <sqltypes.h> int main() { SQLHENV env; SQLHDBC dbc; SQLHSTMT stmt; SQLRETURN ret; /* ODBC API return status */ SQLSMALLINT columns; /* number of columns in result-set */ int row = 0; /* Allocate an environment handle */ SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &env); /* We want ODBC 3 support */ SQLSetEnvAttr(env, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, SQL_IS_INTEGER); /* Allocate a connection handle */ SQLAllocHandle(SQL_HANDLE_DBC, env, &dbc); /* Connection */ SQLDriverConnect(dbc, NULL, (SQLTCHAR *)"DRIVER=SQL Server;SERVER=XXX-PC;DATABASE=datenbankname", SQL_NTS, NULL, 0, NULL, SQL_DRIVER_COMPLETE); /* Allocate a statement handle */ SQLAllocHandle(SQL_HANDLE_STMT, dbc, &stmt); /* Retrieve a list of tables */ SQLTables(stmt, NULL, 0, NULL, 0, NULL, 0, NULL,0); //SQLTables(stmt, NULL, 0, NULL, 0, NULL, 0, (SQLTCHAR *)"Tables", SQL_NTS); /* How many columns are there */ SQLNumResultCols(stmt, &columns); /* Loop through the rows in the result-set */ while (SQL_SUCCEEDED(ret = SQLFetch(stmt))) { SQLUSMALLINT i; printf("Row %d\n", row++); /* Loop through the columns */ for (i = 1; i <= columns; i++) { SQLINTEGER indicator; char buf[512]; /* retrieve column data as a string */ ret = SQLGetData(stmt, i, SQL_C_CHAR,buf, sizeof(buf), &indicator); if (SQL_SUCCEEDED(ret)) { /* Handle null columns */ if (indicator == SQL_NULL_DATA) strcpy(buf, "NULL"); printf(" Column %u : %s\n", i, buf); } } } system("PAUSE"); return 0; }
-
Vermutlich solltest Du den cast nach SQLTCHAR bei SQLDriverConnect weglassen und die Fehlermeldung beachten...
-
hi,
die Verbindung steht nun:
retcode = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv); retcode = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER*)SQL_OV_ODBC3, 0); retcode = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc); retcode = SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT, (SQLPOINTER)5, 0); retcode = SQLDriverConnect(hdbc, 0, (SQLCHAR*)"xxxxxxx", SQL_NTS, (SQLCHAR*) NULL, 0, NULL, SQL_DRIVER_COMPLETE); retcode = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt); retcode = SQLColumns(hstmt, NULL, 0, NULL, 0, (SQLCHAR*)"xxx", SQL_NTS, NULL, 0);
Wie komme ich denn nun an die Spalten, bzw. an deren Inhalt ran?
Gibt es die Möglichekit, direkt mit der SQL Syntax zu arbeiten, oder gibt es C++ Funktionen?