SQLNumResultColsTest.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 SQLNumResultColsTest.cpp
  15.  */
  16. #include <common.hpp>
  17. using namespace std;
  18. #define NRC_MESSAGE_LENGTH 200
  19. SQLHSTMT    NRC_hstmt;
  20. SQLHSTMT    NRC_hdbc;
  21. SQLHENV     NRC_henv;
  22. SQLHDESC    NRC_hdesc;
  23. void SQLNumResultColsTest_DisplayError(SQLSMALLINT NRC_HandleType, 
  24.        SQLHSTMT NRC_InputHandle);
  25. /** 
  26.  * Test returning descriptor information
  27.  *
  28.  * Tests:
  29.  * -# Testing how many columns exist in the result data set
  30.  * 
  31.  * @return Zero, if test succeeded
  32.  */
  33. int SQLNumResultColsTest()
  34. {
  35.   SQLRETURN retcode;
  36.   SQLSMALLINT NumColumns;
  37.   SQLCHAR SQLStmt[NRC_MESSAGE_LENGTH];
  38.   ndbout << endl << "Start SQLNumResultCols Testing" << endl << endl;
  39.   //**************************************************************
  40.   //** If there is no prepared or executed statement associated **
  41.   //** with SQL-statement                                       **
  42.   //**************************************************************
  43.   retcode = SQLNumResultCols(NRC_hstmt, &NumColumns);
  44.   if (retcode == SQL_ERROR || retcode == SQL_SUCCESS_WITH_INFO)
  45.     {
  46.     SQLNumResultColsTest_DisplayError(SQL_HANDLE_STMT, NRC_hstmt);
  47.     }
  48.   //************************************
  49.   //** Allocate An Environment Handle **
  50.   //************************************
  51.   retcode = SQLAllocHandle(SQL_HANDLE_ENV, 
  52.    SQL_NULL_HANDLE, 
  53.    &NRC_henv);
  54.   
  55.   if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
  56.     ndbout << "Allocated an environment Handle!" << endl;
  57.   //*********************************************
  58.   //** Set the ODBC application Version to 3.x **
  59.   //*********************************************
  60.   retcode = SQLSetEnvAttr(NRC_henv, 
  61.   SQL_ATTR_ODBC_VERSION, 
  62.   (SQLPOINTER) SQL_OV_ODBC3, 
  63.   SQL_IS_UINTEGER);
  64.   
  65.   if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
  66.     ndbout << "Set the ODBC application Version to 3.x!" << endl;
  67.   //**********************************
  68.   //** Allocate A Connection Handle **
  69.   //**********************************
  70.   retcode = SQLAllocHandle(SQL_HANDLE_DBC, 
  71.    NRC_henv, 
  72.    &NRC_hdbc);
  73.   if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
  74.     ndbout << "Allocated a connection Handle!" << endl;
  75.   // *******************
  76.   // ** Connect to DB **
  77.   // *******************
  78.   retcode = SQLConnect(NRC_hdbc, 
  79.        (SQLCHAR *) connectString(), 
  80.        SQL_NTS, 
  81.        (SQLCHAR *) "", 
  82.        SQL_NTS, 
  83.        (SQLCHAR *) "", 
  84.        SQL_NTS);
  85.   
  86.   if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
  87.     ndbout << "Connected to DB : OK!" << endl;
  88.   else 
  89.     {  
  90.       ndbout << "Failure to Connect DB!" << endl;
  91.       return NDBT_FAILED;
  92.     }
  93.   //*******************************
  94.   //** Allocate statement handle **
  95.   //*******************************
  96.   
  97.   retcode = SQLAllocHandle(SQL_HANDLE_STMT, 
  98.    NRC_hdbc, 
  99.    &NRC_hstmt); 
  100.   if(retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) 
  101.     ndbout << "Allocated a statement handle!" << endl;
  102.   //************************
  103.   //** Define a statement **
  104.   //************************
  105.   strcpy((char *) SQLStmt, "SELECT * FROM Customers");
  106.   //    strcpy((char *) SQLStmt, 
  107.   //    "INSERT INTO Customers (CustID, Name, Address, Phone) VALUES (7, 'pet', 'LM vag 8', '88888')");
  108.   //*******************************************
  109.   //** Prepare and Execute the SQL statement **
  110.   //*******************************************
  111.   retcode = SQLExecDirect(NRC_hstmt, 
  112.   SQLStmt, 
  113.   SQL_NTS);
  114.   if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) {
  115.     //*****************************************************
  116.     //** Only general error test. It is not in test rule **
  117.     //*****************************************************
  118.     retcode = SQLNumResultCols(NRC_hstmt, &NumColumns);
  119.     if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
  120.       {
  121.       ndbout << endl << "Number of columns in the result data set" << endl;
  122.       ndbout << NumColumns << endl;
  123.       }
  124.     else 
  125.       SQLNumResultColsTest_DisplayError(SQL_HANDLE_STMT, NRC_hstmt);
  126.   }
  127.   // *********************************
  128.   // ** Disconnect and Free Handles **
  129.   // *********************************  
  130.   SQLDisconnect(NRC_hdbc);
  131.   SQLFreeHandle(SQL_HANDLE_STMT, NRC_hstmt);
  132.   SQLFreeHandle(SQL_HANDLE_DBC, NRC_hdbc);
  133.   SQLFreeHandle(SQL_HANDLE_ENV, NRC_henv);
  134.   return NDBT_OK;
  135.   
  136. }
  137. void SQLNumResultColsTest_DisplayError(SQLSMALLINT NRC_HandleType, 
  138.        SQLHSTMT NRC_InputHandle)
  139. {
  140.   SQLRETURN   SQLSTATEs;
  141.   SQLINTEGER  NativeError;
  142.   SQLSMALLINT i, MsgLen;
  143.   SQLCHAR     Msg[NRC_MESSAGE_LENGTH],Sqlstate[5];
  144.   i = 1;
  145.   ndbout << "-------------------------------------------------" << endl;
  146.   ndbout << "Error diagnostics:" << endl;
  147.   
  148.   while ((SQLSTATEs = SQLGetDiagRec(NRC_HandleType, 
  149.     NRC_InputHandle, 
  150.     i, 
  151.     Sqlstate, 
  152.     &NativeError, 
  153.     Msg, 
  154.     sizeof(Msg), 
  155.     &MsgLen)) 
  156.  != SQL_NO_DATA)                   
  157.     {
  158.     
  159.     ndbout << "the HandleType is:" << NRC_HandleType << endl;
  160.     ndbout << "the InputHandle is :" << (long)NRC_InputHandle << endl;
  161.     ndbout << "the Msg is: " << (char *)Msg << endl;
  162.     ndbout << "the output state is:" << (char *)Sqlstate << endl; 
  163.     
  164.     i ++;
  165.     break;
  166.     }
  167.   ndbout << "-------------------------------------------------" << endl;  
  168. }