如何通过代码中的ODBC连接到Teradata?

时间:2017-02-23 09:48:22

标签: c++ database odbc teradata

指定的连接字符串是:

提供商= Teradata的; DBCName = dbc_name;数据库= 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

这与15.10的ODBC版本有关吗?我查看了文档,但看不到指定ODBC版本的位置。有没有办法在Windows中检查它?

0 个答案:

没有答案