如何在代码中通过ODBC连接到Teradata?
问题描述:
指定的连接字符串为:如何在代码中通过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中检查它?
答
我没有将正确的目录添加到路径环境变量!
用户ID似乎不太可能是myUID而密码是myPwd。你提供的是正确的值吗?此外,您可以使用'SQLGetDiagRec'来获取一条信息错误消息。 –
我已更改用户名和密码(可能不允许在公共论坛上发布)。任何运行此示例代码的人都需要将它们更改为与ODBC设置相关的任何内容。 – Stefan
但感谢关于SQLGetDiagRec的提示! – Stefan