SQLSetCursorNameTest.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 SQLSetCursorNameTest.cpp
  15.  */
  16. #include <common.hpp>
  17. using namespace std;
  18. #define SCN_MESSAGE_LENGTH 50
  19. SQLHSTMT    SCN_hstmt;
  20. SQLHDESC    SCN_hdesc;
  21. SQLHENV     SCN_henv;
  22. SQLHDBC     SCN_hdbc;
  23. void SCN_DisplayError(SQLSMALLINT SCN_HandleType, 
  24.       SQLHDESC SCN_InputHandle);
  25. /** 
  26.  * Test to assign a user-defined name to a cursor that is 
  27.  * associated with an active SQL statement handle
  28.  *
  29.  * Tests:
  30.  * -# set user-defined cursor name to zero
  31.  * -# set user-defined cursor name in normal case
  32.  *
  33.  * @return Zero, if test succeeded
  34.  */
  35. int SQLSetCursorNameTest()
  36. {
  37.   SQLRETURN   retcode;
  38.   SQLCHAR     SQLStmt [120];
  39.   SQLCHAR     CursorName [80];
  40.   SQLSMALLINT CNameSize;
  41.   ndbout << endl << "Start SQLSetCursorName Testing" << endl;
  42.   //************************************
  43.   //** Allocate An Environment Handle **
  44.   //************************************
  45.   retcode = SQLAllocHandle(SQL_HANDLE_ENV, 
  46.    SQL_NULL_HANDLE, 
  47.    &SCN_henv);
  48.   
  49. if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
  50.     ndbout << "Allocated an environment Handle!" << endl;
  51.   
  52.   //*********************************************
  53.   //** Set the ODBC application Version to 3.x **
  54.   //*********************************************
  55.   retcode = SQLSetEnvAttr(SCN_henv, 
  56.   SQL_ATTR_ODBC_VERSION, 
  57.   (SQLPOINTER) SQL_OV_ODBC3, 
  58.   SQL_IS_UINTEGER);
  59.   
  60.   if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
  61.     ndbout << "Set the ODBC application Version to 3.x!" << endl;
  62.   //**********************************
  63.   //** Allocate A Connection Handle **
  64.   //**********************************
  65.   retcode = SQLAllocHandle(SQL_HANDLE_DBC, 
  66.    SCN_henv, 
  67.    &SCN_hdbc);
  68.   if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
  69.     ndbout << "Allocated a connection Handle!" << endl;
  70.   
  71.   // *******************
  72.   // ** Connect to DB **
  73.   // *******************
  74.   retcode = SQLConnect(SCN_hdbc, 
  75.        (SQLCHAR *) connectString(), 
  76.        SQL_NTS, 
  77.        (SQLCHAR *) "", 
  78.        SQL_NTS, 
  79.        (SQLCHAR *) "", 
  80.        SQL_NTS);
  81.   
  82.   if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
  83.   ndbout << "Connected to DB : OK!" << endl;
  84.   else 
  85.     {  
  86.       ndbout << "Failure to Connect DB!" << endl;
  87.       return NDBT_FAILED;
  88.     }
  89.   //*******************************
  90.   //** Allocate statement handle **
  91.   //*******************************
  92.   
  93.   retcode = SQLAllocHandle(SQL_HANDLE_STMT, 
  94.    SCN_hdbc, 
  95.    &SCN_hstmt); 
  96.   if(retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) 
  97.     ndbout << "Allocated a statement handle!" << endl;
  98.  
  99.   //************************
  100.   //** Define a statement **
  101.   //************************
  102.   strcpy((char *) SQLStmt, 
  103.  "SELECT * FROM Customers WHERE Address = 'LM Vag 8'");
  104.   //*************************
  105.   //** Prepare a statement **
  106.   //************************* 
  107.   retcode = SQLPrepare(SCN_hstmt, 
  108.        SQLStmt, 
  109.        SQL_NTS);
  110.   //**********************************
  111.   //** Set the cursor name with zero**
  112.   //********************************** 
  113.   retcode = SQLSetCursorName(SCN_hstmt, 
  114.      (char *)"", 
  115.      SQL_NTS);
  116.   if (retcode != SQL_SUCCESS)
  117.     {
  118.       ndbout << endl << "retcode =" << retcode << endl;
  119.       SCN_DisplayError(SQL_HANDLE_STMT, SCN_hstmt);
  120.     }
  121.   //*************************
  122.   //** Set the cursor name **
  123.   //*************************
  124.   retcode = SQLSetCursorName(SCN_hstmt, 
  125.      (char *)"Customer_CURSOR", 
  126.      SQL_NTS);
  127.   if (retcode != SQL_SUCCESS)
  128.     {
  129.       ndbout << endl << "retcode =" << retcode << endl;
  130.       SCN_DisplayError(SQL_HANDLE_STMT, SCN_hstmt);
  131.     }
  132.   //***************************
  133.   //** Execute the statement **
  134.   //***************************
  135.   retcode = SQLExecute(SCN_hstmt);
  136.   //**********************************************
  137.   //** retrieve and display the new cursor name **
  138.   //**********************************************
  139.   retcode = SQLGetCursorName(SCN_hstmt, 
  140.      CursorName, 
  141.      sizeof(CursorName), 
  142.      &CNameSize);
  143.   ndbout << endl << "The cursor name is : " << (char *) CursorName << endl;
  144.   //****************
  145.   // Free Handles **
  146.   //****************
  147.   SQLDisconnect(SCN_hdbc);
  148.   SQLFreeHandle(SQL_HANDLE_STMT, SCN_hstmt);
  149.   SQLFreeHandle(SQL_HANDLE_DBC, SCN_hdbc);
  150.   SQLFreeHandle(SQL_HANDLE_ENV, SCN_henv);
  151.   
  152.   return NDBT_OK;
  153.  }
  154. void SCN_DisplayError(SQLSMALLINT SCN_HandleType, SQLHDESC SCN_InputHandle)
  155. {
  156.   SQLINTEGER  NativeError;
  157.   SQLCHAR     Sqlstate[5], Msg[SCN_MESSAGE_LENGTH];
  158.   SQLRETURN SQLSTATEs;
  159.   SQLSMALLINT i, MsgLen;
  160.   i = 1;
  161.   ndbout << "-------------------------------------------------" << endl;
  162.   ndbout << "Error diagnostics:" << endl;
  163.   
  164.   while ((SQLSTATEs = SQLGetDiagRec(SCN_HandleType, 
  165.     SCN_InputHandle, i, 
  166.     Sqlstate, 
  167.     &NativeError, 
  168.     Msg, 
  169.     sizeof(Msg), 
  170.     &MsgLen)) 
  171.  != SQL_NO_DATA)                   
  172.     {
  173.       ndbout << "the HandleType is:" << SCN_HandleType << endl;
  174.       ndbout << "the InputHandle is :" << (long)SCN_InputHandle << endl;
  175.       ndbout << "the Msg is: " << (char *) Msg << endl;
  176.       ndbout << "the output state is:" << (char *)Sqlstate << endl; 
  177.       
  178.       i ++;
  179.     }
  180.   ndbout << "-------------------------------------------------" << endl;
  181. }