2017-02-23 171 views
0

Указанная строка соединения:Как подключиться к Teradata через ODBC в коде?

Поставщик = Teradata; DBCName = dbc_name; Database = имя_базы; 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.

Я делаю что-то неправильно со строкой соединения?

Update: Использование SQLGetDiagRec Я получил сообщение об ошибке:

Водитель возвращенное недействительным (или не возвращать) SQL_DRIVER_ODBC_VER: 03,80

Однако, если изменить версию ODBC для SQL_OV_ODBC3_80 затем Я получаю сообщение об ошибке:

[Microsoft] [Менеджер драйверов ODBC] Драйвер не поддерживает версию поведения ODBC, запрошенную приложением (см. SQLSetEnvAttr).

, а затем:

водитель вернул недопустимый (или не возвращать) SQL_DRIVER_ODBC_VER: 03,80

Является ли это сделать с версией ODBC в 15.10? Я просмотрел документацию, но не вижу, где указывается версия ODBC. Есть ли способ проверить это в Windows?

+0

Кажется маловероятным, что идентификатор пользователя является 'myUID', а пароль -' myPwd'. Вы задаете правильные значения? Кроме того, вы можете использовать 'SQLGetDiagRec' для получения информационного сообщения об ошибке. –

+0

Я изменил имя пользователя и пароль (возможно, не разрешено публиковать их на открытом форуме). Любой, кто запускает этот образец кода, должен будет изменить их, чтобы быть тем, что имеет отношение к их настройке ODBC. – Stefan

+0

, но спасибо за отзыв о SQLGetDiagRec! – Stefan

ответ

0

Я не добавил правильный каталог к ​​переменной окружения Path !!!!

 Смежные вопросы

  • Нет связанных вопросов^_^