使用 Windows 下的 odbcad32 GUI,我可以与我的数据库建立积极的测试连接。
所以现在,我想在 C++/Cygwin 中做同样的事情
SQLHENV m_henv;
HDBC m_hdbc;
auto ret = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &m_henv);
if (ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO) {
traceLog("Erreur d'allocation de l'environnement\n");
return false;
}
traceLog("Allocation environnement -> ok\n");
// Définir la version ODBC
SQLSetEnvAttr(m_henv, SQL_ATTR_ODBC_VERSION, (void *)SQL_OV_ODBC3, 0);
m_state++; // 1
// Allouer une connexion
ret = SQLAllocHandle(SQL_HANDLE_DBC, m_henv, &m_hdbc);
if (ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO) {
traceLog("Erreur d'allocation de la connexion\n");
return false;
}
traceLog("Allocation connexion -> ok\n");
m_state++; // 2
// Connecter à la source de données
ret = SQLConnect(m_hdbc, (SQLCHAR*)"TOTAL", SQL_NTS,
(SQLCHAR*)"OSIRIS", SQL_NTS,
(SQLCHAR*)"R****1", SQL_NTS);
if (ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO) {
traceLog("Erreur de connexion à la base de données\n");
return false;
}
与
CFLAGS=-墙-O3-m64-std=c++11 LDFLAGS=-lodbc32 -静态
编译没问题,但 SQLConnect() 返回错误。
在odbcad32中我可以找到这个:
ipdb 5578-3734 ENTER SQLConnectW
HDBC 0x0000000000F47A30
WCHAR * 0x0000000000F46520 [ -3] "TOTAL\ 0"
SWORD -3
WCHAR * 0x00007FFEB1C260E0 [ -3] "******\ 0"
SWORD -3
WCHAR * 0x00007FFEB1C260E0 [ -3] "******\ 0"
SWORD -3
ipdb 5578-3734 EXIT SQLConnectW with return code -1 (SQL_ERROR)
HDBC 0x0000000000F47A30
WCHAR * 0x0000000000F46520 [ -3] "TOTAL\ 0"
SWORD -3
WCHAR * 0x00007FFEB1C260E0 [ -3] "******\ 0"
SWORD -3
WCHAR * 0x00007FFEB1C260E0 [ -3] "******\ 0"
SWORD -3
DIAG [08004] [Oracle][ODBC][Ora]ORA-12154: TNS:could not resolve the connect identifier specified
(12154)
谢谢你
SQLCHAR connStr[] = "DSN=TOTAL;UID=OSIRIS;PWD=Rouen001;";
SQLDriverConnect(m_hDbc, NULL, connStr, SQL_NTS, NULL, 0, NULL, SQL_DRIVER_COMPLETE);
这有同样的效果
笔记,我记得:
我在/usr/include/sqltypes.h中修改 typedef 无符号长 ULONG; 到 typedef 无符号整型 ULONG;
因为与 /usr/include/w32api/wtypesbase.h 中的定义有冲突
typedef DWORD ULONG;
可能是问题所在?