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

Указанная строка подключения:

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] Драйвер не поддерживает версию поведения ODBC, запрошенную приложением (см. SQLSetEnvAttr).

а потом:

Драйвер вернул недопустимый (или не смог вернуть) SQL_DRIVER_ODBC_VER: 03.80

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

0

Решение

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

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]