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

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 SQLGetTypeInfoTest.cpp
  15.  */
  16. #include <common.hpp>
  17. #define GT_MESSAGE_LENGTH 200
  18. using namespace std;
  19. SQLHDBC     GT_hdbc;
  20. SQLHSTMT    GT_hstmt;
  21. SQLHENV     GT_henv;
  22.        
  23. void SQLGetTypeInfoTest_DisplayError(SQLSMALLINT GT_HandleType, 
  24.      SQLHDBC GT_InputHandle);
  25. /** 
  26.  * Test to retrieve general information about the data types
  27.  * supported by the data source an application is currently connected to.
  28.  *
  29.  * Tests:
  30.  * -# Test The value of FunctionId is not in table 37
  31.  * @return Zero, if test succeeded
  32.  */
  33. int SQLGetTypeInfoTest()
  34. {
  35.   SQLRETURN   retcode;
  36.   SQLSMALLINT ColumnSize;
  37.   unsigned long TypeName;
  38.   //  SQLCHAR TypeName[128];
  39.   ndbout << endl << "Start SQLGetTypeInfo Testing" << endl;
  40.   //************************************
  41.   //** Allocate An Environment Handle **
  42.   //************************************
  43.   retcode = SQLAllocHandle(SQL_HANDLE_ENV, 
  44.    SQL_NULL_HANDLE, 
  45.    &GT_henv);
  46.   
  47.   if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
  48.     ndbout << "Allocated an environment Handle!" << endl;
  49.   //*********************************************
  50.   //** Set the ODBC application Version to 3.x **
  51.   //*********************************************
  52.   retcode = SQLSetEnvAttr(GT_henv,
  53.   SQL_ATTR_ODBC_VERSION, 
  54.   (SQLPOINTER) SQL_OV_ODBC3, 
  55.   SQL_IS_UINTEGER);
  56.   
  57.   if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
  58.     ndbout << "Set the ODBC application Version to 3.X!" << endl;
  59.   //**********************************
  60.   //** Allocate A Connection Handle **
  61.   //**********************************
  62.   retcode = SQLAllocHandle(SQL_HANDLE_DBC, 
  63.    GT_henv, 
  64.    &GT_hdbc);
  65.   if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
  66.     ndbout << "Allocated a connection Handle!" << endl;
  67.   // *******************
  68.   // ** Connect to DB **
  69.   // *******************
  70.   retcode = SQLConnect(GT_hdbc, 
  71.        (SQLCHAR *) connectString(), 
  72.        SQL_NTS, 
  73.        (SQLCHAR *) "", 
  74.        SQL_NTS, 
  75.        (SQLCHAR *) "", 
  76.        SQL_NTS);
  77.   //*******************************
  78.   //** Allocate statement handle **
  79.   //*******************************
  80.   
  81.   retcode = SQLAllocHandle(SQL_HANDLE_STMT, 
  82.    GT_hdbc, 
  83.    &GT_hstmt); 
  84.   //***********************************************
  85.   //** Get DataType From the Current Application **
  86.   //***********************************************
  87.   retcode = SQLGetTypeInfo(GT_hstmt, SQL_CHAR);
  88.   ndbout << "retcode =SQLGetTypeInfo()= " << retcode << endl;
  89.   if (retcode == SQL_SUCCESS)
  90.     {
  91.       retcode =SQLBindCol(GT_hstmt, 
  92.   2, 
  93.   SQL_C_ULONG, 
  94.   TypeName, 
  95.   sizeof(TypeName),
  96.   NULL);
  97.       ndbout << "retcode = SQLBindCol()= " << retcode << endl;
  98.       //      retcode =SQLBindCol(GT_hstmt, 
  99.       //   1, 
  100.       //   SQL_C_DEFAULT, 
  101.       //   ColumnSize, 
  102.       //   sizeof(ColumnSize),
  103.       //   NULL);
  104.       retcode = SQLFetch(GT_hstmt);
  105.       ndbout << "retcode = SQLFETCH()=" << retcode << endl;
  106.       ndbout << "DataType = " << TypeName << endl;
  107.     }
  108.   //*******************************************************
  109.   //** If the Value of DataType is not in Table 37, then **
  110.   //** an exception condition is raised                  **
  111.   //*******************************************************
  112.   retcode = SQLGetTypeInfo(GT_hstmt, 8888888);
  113.   if (retcode == -2)
  114.    {
  115.      ndbout << "retcode = " << retcode << endl;
  116.      ndbout << "The value of DataType is not in table 37" << endl;
  117.      SQLGetTypeInfoTest_DisplayError(SQL_HANDLE_STMT, GT_hstmt);
  118.    }
  119.   else if (retcode == SQL_ERROR || retcode == SQL_SUCCESS_WITH_INFO)
  120.     {
  121.       ndbout << "retcode = " << retcode << endl;
  122.       ndbout << endl << "The value of DataType is not in Table 37" << endl;
  123.       SQLGetTypeInfoTest_DisplayError(SQL_HANDLE_STMT, GT_hstmt);
  124.     }
  125.   else 
  126.     {
  127.       ndbout << "retcode = " << retcode << endl;
  128.       ndbout << endl << "The value of DataType is not in Table 37" << endl;
  129.       SQLGetTypeInfoTest_DisplayError(SQL_HANDLE_STMT, GT_hstmt);
  130.     }
  131.   // *********************************
  132.   // ** Disconnect and Free Handles **
  133.   // *********************************  
  134.   SQLDisconnect(GT_hdbc);
  135.   SQLFreeHandle(SQL_HANDLE_STMT, GT_hstmt);
  136.   SQLFreeHandle(SQL_HANDLE_DBC, GT_hdbc);
  137.   SQLFreeHandle(SQL_HANDLE_ENV, GT_henv);
  138.   return NDBT_OK;
  139.  }
  140. void SQLGetTypeInfoTest_DisplayError(SQLSMALLINT GT_HandleType, 
  141.      SQLHDBC GT_InputHandle)
  142. {
  143.   SQLINTEGER    NativeError;
  144.   SQLSMALLINT   i, MsgLen;
  145.   SQLCHAR   Msg[GT_MESSAGE_LENGTH];
  146.   SQLRETURN   SQLSTATEs;
  147.   SQLCHAR Sqlstate[50];
  148.   i = 1;
  149.   ndbout << "-------------------------------------------------" << endl;
  150.   ndbout << "Error diagnostics:" << endl;
  151.   while ((SQLSTATEs = SQLGetDiagRec(GT_HandleType, 
  152.     GT_InputHandle, 
  153.     i, 
  154.     Sqlstate, 
  155.     &NativeError, 
  156.     Msg, 
  157.     sizeof(Msg), 
  158.     &MsgLen)) 
  159.  != SQL_NO_DATA)                   
  160. {
  161.      ndbout << "the HandleType is:" << GT_HandleType << endl;
  162.      ndbout << "the InputHandle is :" << (long)GT_InputHandle << endl;
  163.      ndbout << "the Msg is :" << (char *) Msg << endl;
  164.      ndbout << "the output state is:" << (char *)Sqlstate << endl; 
  165.      i ++;
  166.      break;
  167.                                                          }
  168.   ndbout << "-------------------------------------------------" << endl;
  169. }