2017-02-23 2 views
0

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?

+0

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. –

+0

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

+0

aber danke für den Tipp über SQLGetDiagRec! – Stefan

Antwort

0

Ich hatte nicht das richtige Verzeichnis zur Umgebungsvariablen Pfad hinzugefügt !!!!

Verwandte Themen