SQLRowCountTest.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 SQLRowCountTest.cpp
  15.  */
  16. #include <common.hpp>
  17. using namespace std;
  18. #define NAME_LEN 50
  19. #define PHONE_LEN 10
  20. #define SALES_PERSON_LEN 10
  21. #define STATUS_LEN 6
  22. #define RC_MESSAGE_LENGTH 200
  23. SQLHSTMT    RC_hstmt;
  24. SQLHDBC     RC_hdbc;
  25. SQLHENV     RC_henv;
  26. SQLHDESC    RC_hdesc;
  27. void SQLRowCountTest_DisplayError(SQLSMALLINT RC_HandleType, 
  28.   SQLHSTMT RC_InputHandle);
  29. /** 
  30.  * Test to obtain a count of the number of rows
  31.  * in a table
  32.  *
  33.  * -# Call SQLRowCount without executed statement
  34.  * -# Call SQLRowCount with normal case
  35.  *
  36.  * @return Zero, if test succeeded
  37.  */
  38. int SQLRowCountTest()
  39. {
  40.   SQLRETURN   retcode;
  41.   unsigned long  RowCount;
  42.   SQLCHAR SQLStmt [120];
  43.   ndbout << endl << "Start SQLRowCount Testing" << endl;
  44.   //************************************************************************
  45.   //* If there is no executed statement, an execption condotion is raised **
  46.   //************************************************************************
  47.       retcode = SQLRowCount(RC_hstmt, &RowCount);
  48.       if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) 
  49. {
  50.          SQLRowCountTest_DisplayError(SQL_HANDLE_STMT, RC_hstmt);
  51. }
  52.   //************************************
  53.   //** Allocate An Environment Handle **
  54.   //************************************
  55.   retcode = SQLAllocHandle(SQL_HANDLE_ENV, 
  56.    SQL_NULL_HANDLE, 
  57.    &RC_henv);
  58.   
  59.   if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
  60.     ndbout << "Allocated an environment Handle!" << endl;
  61.   
  62.   //*********************************************
  63.   //** Set the ODBC application Version to 3.x **
  64.   //*********************************************
  65.   retcode = SQLSetEnvAttr(RC_henv, 
  66.   SQL_ATTR_ODBC_VERSION, 
  67.   (SQLPOINTER) SQL_OV_ODBC3, 
  68.   SQL_IS_UINTEGER);
  69.   
  70.   if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
  71.     ndbout << "Set the ODBC application Version to 3.x!" << endl;
  72.   //**********************************
  73.   //** Allocate A Connection Handle **
  74.   //**********************************
  75.   retcode = SQLAllocHandle(SQL_HANDLE_DBC, 
  76.    RC_henv, 
  77.    &RC_hdbc);
  78. if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
  79.     ndbout << "Allocated a connection Handle!" << endl;
  80.   
  81.   // *******************
  82.   // ** Connect to DB **
  83.   // *******************
  84.  retcode = SQLConnect(RC_hdbc, 
  85.       (SQLCHAR *) connectString(), 
  86.       SQL_NTS, 
  87.       (SQLCHAR *) "", 
  88.       SQL_NTS, 
  89.       (SQLCHAR *) "", 
  90.       SQL_NTS);
  91.   
  92.  if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
  93.    ndbout << "Connected to DB : OK!" << endl;
  94.   else 
  95.     {  
  96.       ndbout << "Failure to Connect DB!" << endl;
  97.       return NDBT_FAILED;
  98.     }
  99.   //*******************************
  100.   //** Allocate statement handle **
  101.   //*******************************
  102.   
  103.   retcode = SQLAllocHandle(SQL_HANDLE_STMT, 
  104.    RC_hdbc, 
  105.    &RC_hstmt); 
  106.   if(retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) 
  107.     ndbout << "Allocated a statement handle!" << endl;
  108.   
  109.   //************************
  110.   //** Define a statement **
  111.   //************************
  112.    strcpy((char *) SQLStmt, "INSERT INTO Customers (CustID, Name, Address,Phone) VALUES(588, 'HeYong','LM888','919888')");
  113.   //*******************************
  114.   //* Prepare  the SQL statement **
  115.   //*******************************
  116.   retcode = SQLPrepare(RC_hstmt, 
  117.        SQLStmt, 
  118.        SQL_NTS);
  119.   if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) {
  120.   //******************************
  121.   //* Execute the SQL statement **
  122.   //******************************
  123.     retcode = SQLExecute(RC_hstmt);
  124.     if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) {
  125.  
  126.   //***************
  127.   // Normal test **
  128.   //***************
  129.     retcode = SQLRowCount(RC_hstmt, &RowCount);
  130.     if  (retcode == SQL_ERROR )
  131.       SQLRowCountTest_DisplayError(SQL_HANDLE_STMT, RC_hstmt);
  132.     else
  133.       ndbout << endl << "Number of the rows in the table Customers: " 
  134.      << (int)RowCount << endl;
  135.     }
  136.   }
  137.   // *********************************
  138.   // ** Disconnect and Free Handles **
  139.   // *********************************  
  140.   SQLDisconnect(RC_hdbc);
  141.   SQLFreeHandle(SQL_HANDLE_STMT, RC_hstmt);
  142.   SQLFreeHandle(SQL_HANDLE_DBC, RC_hdbc);
  143.   SQLFreeHandle(SQL_HANDLE_ENV, RC_henv);
  144.   return NDBT_OK;
  145.   
  146. }
  147. void SQLRowCountTest_DisplayError(SQLSMALLINT RC_HandleType, 
  148.   SQLHSTMT RC_InputHandle)
  149. {
  150.   SQLRETURN   SQLSTATEs;
  151.   SQLSMALLINT i, MsgLen;
  152.   SQLCHAR     Sqlstate[5], Msg[RC_MESSAGE_LENGTH];
  153.   SQLINTEGER  NativeError;
  154.      i = 1;
  155.      while ((SQLSTATEs = SQLGetDiagRec(RC_HandleType, 
  156.        RC_InputHandle, 
  157.        i, 
  158.        Sqlstate, 
  159.        &NativeError, 
  160.        Msg, 
  161.        sizeof(Msg), 
  162.        &MsgLen)) 
  163.     != SQL_NO_DATA)                   
  164. {
  165.      ndbout << "the HandleType is:" << RC_HandleType << endl;
  166.      ndbout << "the InputHandle is :" << (long)RC_InputHandle << endl;
  167.      ndbout << "the Msg:" << (char *)Msg << endl;
  168.      ndbout << "the output state is:" << (char *)Sqlstate << endl; 
  169.      i ++;
  170. }
  171. }