SQLDisconnectTest.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 SQLDisconnectTest.cpp
  15.  */
  16. #include <common.hpp>
  17. #define disc_SQL_MAXIMUM_MESSAGE_LENGTH 200
  18. using namespace std;
  19. SQLHDBC     disc_hdbc;
  20. SQLHSTMT    disc_hstmt;
  21. SQLHENV     disc_henv;
  22. SQLHDESC    disc_hdesc;
  23.        
  24. void Disconnect_DisplayError_HDBC(SQLSMALLINT disc_HandleType, 
  25.   SQLHDBC disc_InputHandle);
  26. /** 
  27.  * Test to close the data source connection associated with
  28.  * a specific connection handle
  29.  *
  30.  * -# Normal case testing 
  31.  * @return Zero, if test succeeded
  32.  */
  33. int SQLDisconnectTest()
  34. {
  35.   SQLRETURN   disc_retcode;
  36.   ndbout << endl << "Start SQLDisconnect Testing" << endl;
  37.   
  38.   // ************************************
  39.   // ** Allocate an environment handle **
  40.   // ************************************
  41.   disc_retcode = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &disc_henv);
  42.   if(disc_retcode == SQL_SUCCESS || disc_retcode == SQL_SUCCESS_WITH_INFO) {
  43.     ndbout << "Allocated an environment handle!" << endl;
  44.   } else {
  45.     ndbout << "Failed to allocate environment handle!" << endl;
  46.     return NDBT_FAILED;
  47.   }
  48.   // *********************************************
  49.   // ** Set the ODBC application Version to 3.x **
  50.   // *********************************************
  51.   disc_retcode = SQLSetEnvAttr(disc_henv, 
  52.        SQL_ATTR_ODBC_VERSION, 
  53.        (SQLPOINTER) SQL_OV_ODBC3, 
  54.        SQL_IS_UINTEGER);
  55.   if (disc_retcode == SQL_SUCCESS || disc_retcode == SQL_SUCCESS_WITH_INFO) {
  56.     ndbout << "Set ODBC application version to 3.x" << endl;
  57.   } else {
  58.     ndbout << "Failed to set application version!" << endl;
  59.     return NDBT_FAILED;
  60.   }
  61.   
  62.   // **********************************
  63.   // ** Allocate a connection handle **
  64.   // **********************************
  65.   disc_retcode = SQLAllocHandle(SQL_HANDLE_DBC, disc_henv, &disc_hdbc);
  66.   if (disc_retcode == SQL_SUCCESS || disc_retcode == SQL_SUCCESS_WITH_INFO) {
  67.     ndbout << "Allocated a connection handle!" << endl;
  68.   } else {
  69.     ndbout << "Failed to allocate connection handle!" << endl;
  70.     return NDBT_FAILED;
  71.   }
  72.   // *******************
  73.   // ** connect to DB **
  74.   // *******************
  75.   disc_retcode = SQLConnect(disc_hdbc, 
  76.     (SQLCHAR *) connectString(),
  77.     SQL_NTS, 
  78.     (SQLCHAR *) "",
  79.     SQL_NTS, 
  80.     (SQLCHAR *) "",
  81.     SQL_NTS);
  82.   // **********************
  83.   // ** Disconnect to DB **
  84.   // **********************
  85.   disc_retcode = SQLDisconnect(disc_hdbc);
  86.   if (disc_retcode == SQL_INVALID_HANDLE)
  87. {
  88.   ndbout << "Handle Type is SQL_HANDLE_DBC, but string SQL_INVALID_HANDLE"
  89.  << " still appeared. Please check program" << endl;
  90.   Disconnect_DisplayError_HDBC(SQL_HANDLE_DBC, disc_hdbc);
  91. }
  92.   if (disc_retcode == SQL_ERROR || disc_retcode == SQL_SUCCESS_WITH_INFO)
  93. {
  94.   ndbout << "disconnect retcode = " << disc_retcode << endl;
  95.   Disconnect_DisplayError_HDBC(SQL_HANDLE_DBC, disc_hdbc);
  96. }
  97.   // ******************
  98.   // ** Free Handles **
  99.   // ******************  
  100.   SQLFreeHandle(SQL_HANDLE_STMT, disc_hstmt);
  101.   SQLFreeHandle(SQL_HANDLE_DBC, disc_hdbc);
  102.   SQLFreeHandle(SQL_HANDLE_ENV, disc_henv);
  103.   return NDBT_OK;
  104.  }
  105. void Disconnect_DisplayError_HDBC(SQLSMALLINT disc_HandleType, 
  106.   SQLHDBC disc_InputHandle)
  107. {
  108.   SQLCHAR   disc_Msg[disc_SQL_MAXIMUM_MESSAGE_LENGTH];
  109.   SQLSMALLINT   disc_i, disc_MsgLen;
  110.   SQLINTEGER    disc_NativeError;
  111.   SQLRETURN   disc_SQLSTATEs;
  112.   disc_i = 1;
  113.   SQLCHAR disc_Sqlstate[5];
  114.   
  115.   while ((disc_SQLSTATEs = SQLGetDiagRec(disc_HandleType, 
  116.  disc_InputHandle, 
  117.  disc_i, 
  118.  disc_Sqlstate, 
  119.  &disc_NativeError, 
  120.  disc_Msg, 
  121.  sizeof(disc_Msg), 
  122.  &disc_MsgLen)) 
  123.  != SQL_NO_DATA)
  124.     {
  125.     
  126.       ndbout << "the HandleType is:" << disc_HandleType << endl;
  127.       ndbout << "the InputHandle is :" <<(long)disc_InputHandle << endl;
  128.       ndbout << "the output state is:" << (char *)disc_Sqlstate << endl; 
  129.     
  130.       disc_i ++;
  131.       break;
  132.     }
  133.   
  134. }