2017-02-23 94 views
0

指定的連接字符串爲:如何在代碼中通過ODBC連接到Teradata?

Provider = Teradata; DBCName = dbc_name; Database = database_name; UID = USER_NAME; PWD =密碼;

我安裝了Teradata ODBC客戶端版本15.1並通過控制面板建立了一個連接。

當使用代碼:

#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); 
    } 
} 

的命令的SQLDriverConnect總是返回-1。

我在做連接字符串錯誤嗎?

更新: 使用SQLGetDiagRec的我獲得了錯誤信息:

驅動程序返回無效(或失敗返回)SQL_DRIVER_ODBC_VER:03.80

但是,如果我改變ODBC版本SQL_OV_ODBC3_80然後我收到錯誤消息:

[Microsoft] [ODBC Driver Manager]驅動程序不支持應用程序請求的ODBC行爲版本(請參閱SQLSetEnvAttr)。

然後:

驅動程序返回無效(或失敗返回)SQL_DRIVER_ODBC_VER:03.80

這是做的15.10的ODBC的版本?我查看了文檔,但無法看到ODBC版本的指定位置。有沒有辦法在Windows中檢查它?

+0

用戶ID似乎不太可能是myUID而密碼是myPwd。你提供的是正確的值嗎?此外,您可以使用'SQLGetDiagRec'來獲取一條信息錯誤消息。 –

+0

我已更改用戶名和密碼(可能不允許在公共論壇上發佈)。任何運行此示例代碼的人都需要將它們更改爲與ODBC設置相關的任何內容。 – Stefan

+0

但感謝關於SQLGetDiagRec的提示! – Stefan

回答

0

我沒有將正確的目錄添加到路徑環境變量!