Der angegebene Verbindungszeichenfolge ist:Wie verbinde ich mich über ODBC im Code mit einem Teradata?
Provider = Teradata; DBCName = dbc_name; Database = database_name; Uid = Benutzername; Pwd = Passwort;
Ich habe Teradata ODBC Client Version 15.1 installiert und über das Control Panel eine Verbindung dazu hergestellt.
Wenn verwenden Sie den Code:
#include "stdafx.h"
#include <Windows.h>
#include <sql.h>
#include <sqlext.h>
#include <string>
int _tmain(int argc, _TCHAR* argv[])
{
SQLHANDLE hdbc = SQL_NULL_HANDLE;
SQLHANDLE henv = SQL_NULL_HANDLE;
SQLRETURN retval = SQL_SUCCESS;
retval = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv);
if (retval != SQL_SUCCESS) {
printf("SQLAllocHandle SQL_HANDLE_ENV failed! Result = %d\n", retval);
}
retval = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, 0);
if (retval != SQL_SUCCESS) {
printf("SQLSetEnvAttr SQL_ATTR_ODBC_VERSION failed! Result = %d\n", retval);
}
SQLINTEGER output_nts, autocommit;
retval = SQLGetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, &output_nts, 0, 0);
retval = SQLSetEnvAttr(henv, SQL_ATTR_OUTPUT_NTS, (SQLPOINTER)SQL_TRUE, 0);
if (retval != SQL_SUCCESS) {
printf("SQLSetEnvAttr SQL_ATTR_OUTPUT_NTS failed! Result = %d\n", retval);
}
retval = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);
if (retval != SQL_SUCCESS) {
printf("SQLAllocHandle SQL_HANDLE_DBC failed! Result = %d\n", retval);
}
SQLCHAR szConn[1024];
SWORD cbConn = 0;
std::string connectionString("Provider=teradata;DBCName=myLocalTDcop;database=myDatabaseName;uid=myUID;pwd=myPwd;");
retval = SQLDriverConnect(hdbc, NULL, (SQLCHAR*)connectionString.c_str(), SQL_NTS, szConn, 1024, &cbConn, SQL_DRIVER_NOPROMPT);
if (retval != SQL_SUCCESS) {
printf("SQLDriverConnect failed! Result = %d\n", retval);
}
}
Der SQLDriverConnect Befehl immer -1 zurück.
Mache ich etwas falsch mit der Verbindungszeichenfolge?
Update: SQLGetDiagRec Verwendung Ich habe die Fehlermeldung erhalten:
Der Fahrer ungültig zurückgegeben (oder nicht zurückkehren) SQL_DRIVER_ODBC_VER: 03.80
Wenn ich jedoch die ODBC-Version zu SQL_OV_ODBC3_80 ändern dann Ich erhalte die Fehlermeldung:
[Microsoft] [ODBC Treiber Manager] Der Treiber unterstützt nicht die Version von ODBC-Verhalten, das die Anwendung angefordert hat (siehe SQLSetEnvAttr).
und dann:
Der Fahrer zurückgegeben ungültig (oder nicht zurückkehren) SQL_DRIVER_ODBC_VER: 03.80
Ist das mit der ODBC-Version 15.10 zu tun? Ich habe die Dokumentation angeschaut, kann aber nicht sehen, wo die ODBC-Version angegeben ist. Gibt es eine Möglichkeit, es in Windows zu überprüfen?
Es scheint unwahrscheinlich, dass die Benutzer-ID 'myUID' ist und das Kennwort' myPwd' lautet. Liefern Sie die richtigen Werte? Außerdem können Sie 'SQLGetDiagRec' verwenden, um eine informative Fehlermeldung zu erhalten. –
Ich habe den Benutzernamen und das Passwort geändert (wahrscheinlich nicht erlaubt, sie in einem öffentlichen Forum zu veröffentlichen). Jeder, der diesen Beispielcode ausführt, müsste diese ändern, um für das ODBC-Setup relevant zu sein. – Stefan
aber danke für den Tipp über SQLGetDiagRec! – Stefan