在 Cygwin 中从 C++ 程序使用 Windows ODBC 驱动程序:TNS:无法解析指定的连接标识符

问题描述 投票:0回答:1

使用 Windows 下的 odbcad32 GUI,我可以与我的数据库建立积极的测试连接。

odbcad32 ok

所以现在,我想在 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) 

谢谢你

c++ oracle odbc tnsnames
1个回答
0
投票
 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;

可能是问题所在?

© www.soinside.com 2019 - 2024. All rights reserved.