SQLConnectTest.cpp
上传用户:romrleung
上传日期:2022-05-23
资源大小:18897k
文件大小:5k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. /* Copyright (C) 2003 MySQL AB
  2.    This program is free software; you can redistribute it and/or modify
  3.    it under the terms of the GNU General Public License as published by
  4.    the Free Software Foundation; either version 2 of the License, or
  5.    (at your option) any later version.
  6.    This program is distributed in the hope that it will be useful,
  7.    but WITHOUT ANY WARRANTY; without even the implied warranty of
  8.    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  9.    GNU General Public License for more details.
  10.    You should have received a copy of the GNU General Public License
  11.    along with this program; if not, write to the Free Software
  12.    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */
  13.  /**
  14.  * @file SQLConnectTest.cpp
  15.  */
  16. #include <common.hpp>
  17. using namespace std;
  18. SQLHDBC     conn_hdbc;
  19. SQLHSTMT    conn_hstmt;
  20. SQLHENV     conn_henv;
  21. SQLHDESC    conn_hdesc;
  22. SQLRETURN   conn_retcode;
  23. #define conn_SQL_MAXIMUM_MESSAGE_LENGTH 200
  24. SQLCHAR conn_Sqlstate[5];
  25. SQLINTEGER    conn_NativeError;
  26. SQLSMALLINT   conn_MsgLen;
  27. SQLCHAR       conn_Msg[conn_SQL_MAXIMUM_MESSAGE_LENGTH];
  28.        
  29. void SQLConnectTest_DisplayError_HDBC(SQLSMALLINT conn_HandleType, 
  30.       SQLHDBC conn_InputHandle);
  31. /** 
  32.  * -# Test to make a connection to an ODBC data source
  33.  *
  34.  * @return Zero, if test succeeded
  35.  */
  36. int SQLConnectTest()
  37. {
  38.   ndbout << endl << "Start SQLConnect Testing" << endl;
  39.   
  40.   // ************************************
  41.   // ** Allocate an environment handle **
  42.   // ************************************
  43.   conn_retcode = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &conn_henv);
  44.   //conn_retcode = SQLAllocEnv(&conn_henv);
  45.   if(conn_retcode == SQL_SUCCESS || conn_retcode == SQL_SUCCESS_WITH_INFO)
  46.     {
  47.       ndbout << "Allocated an environment handle!" << endl;
  48.     } 
  49.   else 
  50.     {
  51.       ndbout << "Failed to allocate environment handle!" << endl;
  52.       return NDBT_FAILED;
  53.     }
  54.   // *********************************************
  55.   // ** Set the ODBC application Version to 3.x **
  56.   // *********************************************
  57.   conn_retcode = SQLSetEnvAttr(conn_henv, 
  58.        SQL_ATTR_ODBC_VERSION, 
  59.        (SQLPOINTER) SQL_OV_ODBC3, 
  60.        SQL_IS_UINTEGER);
  61.   if (conn_retcode == SQL_SUCCESS || conn_retcode == SQL_SUCCESS_WITH_INFO) {
  62.     ndbout << "Set ODBC application version to 3.x" << endl;
  63.   } else {
  64.     ndbout << "Failed to set application version!" << endl;
  65.     return NDBT_FAILED;
  66.   }
  67.   
  68.   // **********************************
  69.   // ** Allocate a connection handle **
  70.   // **********************************
  71.   conn_retcode = SQLAllocHandle(SQL_HANDLE_DBC, conn_henv, &conn_hdbc);
  72.   //     retcode = SQLAllocConnect(conn_henv, &conn_hdbc);
  73.   if (conn_retcode == SQL_SUCCESS || conn_retcode == SQL_SUCCESS_WITH_INFO) 
  74.     {
  75.       ndbout << "Allocated a connection handle!" << endl;
  76.     } 
  77.   else 
  78.     {
  79.       ndbout << "Failed to allocate connection handle!" << endl;
  80.       return NDBT_FAILED;
  81.     }
  82.   
  83.   // *******************
  84.   // ** Connect to DB **
  85.   // *******************
  86.   conn_retcode = SQLConnect(conn_hdbc, 
  87.     (SQLCHAR *) connectString(),
  88.     SQL_NTS, 
  89.     (SQLCHAR *) "",
  90.     SQL_NTS, 
  91.     (SQLCHAR *) "",
  92.     SQL_NTS);
  93.   ndbout << "conn_retcode = " << conn_retcode << endl;
  94.   if (conn_retcode == SQL_SUCCESS) 
  95.     {
  96.       ndbout << "Connected to DB!" << endl;
  97.     } 
  98.   else if (conn_retcode == SQL_SUCCESS_WITH_INFO)
  99.     {
  100.       ndbout << "Connected to DB, but SQL_SUCCESS_WITH_INFO!" << endl;
  101.       SQLConnectTest_DisplayError_HDBC(SQL_HANDLE_DBC, conn_hdbc);
  102.     }
  103.   else if (conn_retcode == SQL_INVALID_HANDLE) 
  104.     {
  105.       ndbout << "SQL_INVALID_HANDLE appeared. Please check program." << endl;
  106.       return NDBT_FAILED;
  107.     } 
  108.   else if (conn_retcode == SQL_ERROR)
  109.     { 
  110.       ndbout << "Failed to connect!" << endl;
  111.       SQLConnectTest_DisplayError_HDBC(SQL_HANDLE_DBC, conn_hdbc);
  112.       return NDBT_FAILED;
  113.     }
  114.   else
  115.     ;
  116.   // ******************
  117.   // ** Free Handles **
  118.   // ******************  
  119.   SQLDisconnect(conn_hdbc);
  120.   SQLFreeHandle(SQL_HANDLE_STMT, conn_hstmt);
  121.   SQLFreeHandle(SQL_HANDLE_DBC, conn_hdbc);
  122.   SQLFreeHandle(SQL_HANDLE_ENV, conn_henv);
  123.   return NDBT_OK;
  124. }
  125. void SQLConnectTest_DisplayError_HDBC(SQLSMALLINT conn_HandleType, 
  126.       SQLHDBC conn_InputHandle) {
  127.   SQLSMALLINT conn_i = 1;
  128.   SQLRETURN   conn_SQLSTATE;
  129.   ndbout << "-------------------------------------------------" << endl;
  130.   ndbout << "Error diagnostics:" << endl;
  131.   while ((conn_SQLSTATE = SQLGetDiagRec(conn_HandleType, 
  132. conn_InputHandle, 
  133. conn_i, 
  134. conn_Sqlstate, 
  135. &conn_NativeError, 
  136. conn_Msg, 
  137. sizeof(conn_Msg), 
  138. &conn_MsgLen)
  139.   ) != SQL_NO_DATA)
  140.     {
  141.       ndbout << "SQLSTATE = " << conn_SQLSTATE << endl;
  142.       ndbout << "the HandleType is: " << conn_HandleType << endl;
  143.       ndbout << "the InputHandle is :" << (long)conn_InputHandle << endl;
  144.       ndbout << "the conn_Msg is: " << (char *) conn_Msg << endl;
  145.       ndbout << "the output state is:" << (char *)conn_Sqlstate << endl; 
  146.       
  147.       conn_i ++;
  148.       break;
  149.     }
  150.   ndbout << "-------------------------------------------------" << endl;
  151. }