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

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 SQLColAttributeTest3.cpp
  15.  */
  16. #include <common.hpp>
  17. using namespace std;
  18. #define MAXIMUM_MESSAGE_LENGTH_Test3 200
  19. #define BufferLengthTest3 156
  20. SQLHSTMT    ColAtt_hstmtTest3;
  21. SQLHSTMT    ColAtt_hdbcTest3;
  22. SQLHENV     ColAtt_henvTest3;
  23. SQLHDESC    ColAtt_hdescTest3;
  24. SQLCHAR     TypeName[18];
  25. SQLSMALLINT TypeNameLen;
  26. SQLRETURN ColAtt_retTest3;
  27. void ColAtt_DisplayErrorTest3(SQLSMALLINT ColAttTest3_HandleType, 
  28.       SQLHSTMT ColAttTest3_InputHandle);
  29. /** 
  30.  * Test returning descriptor information
  31.  *
  32.  * Test:
  33.  * -# Print out column name without executing statement
  34.  * 
  35.  * @return Zero, if test succeeded
  36.  */
  37. int SQLColAttributeTest3()
  38. {
  39.   ndbout << endl << "Start SQLColAttribute Testing3" << endl;
  40.   SQLCHAR SQLStmt [120];
  41.   //********************************************************************
  42.   //** Test 3:                                                        **
  43.   //**                                                                **
  44.   //** Prepare a statement without executing the statement            **
  45.   //** We want to print out the Type Name of each column in the table **
  46.   //** Customers                                                      **
  47.   //**                                                                **
  48.   //** Intended result: Only display column name, but there is no new **
  49.   //**          row in table Customers                                **
  50.   //********************************************************************
  51.   //************************************
  52.   //** Allocate An Environment Handle **
  53.   //************************************
  54.   ColAtt_retTest3 = SQLAllocHandle(SQL_HANDLE_ENV, 
  55.    SQL_NULL_HANDLE, 
  56.    &ColAtt_henvTest3);
  57.   
  58.   if (ColAtt_retTest3 == SQL_SUCCESS || ColAtt_retTest3 == SQL_SUCCESS_WITH_INFO)
  59.     ndbout << "Allocated an environment Handle!" << endl;
  60.   //*********************************************
  61.   //** Set the ODBC application Version to 3.x **
  62.   //*********************************************
  63.   ColAtt_retTest3 = SQLSetEnvAttr(ColAtt_henvTest3, 
  64.   SQL_ATTR_ODBC_VERSION, 
  65.   (SQLPOINTER) SQL_OV_ODBC3, 
  66.   SQL_IS_UINTEGER);
  67.   
  68.   if (ColAtt_retTest3 == SQL_SUCCESS || ColAtt_retTest3 == SQL_SUCCESS_WITH_INFO)
  69.     ndbout << "Set the ODBC application Version to 3.x!" << endl;
  70.   //**********************************
  71.   //** Allocate A Connection Handle **
  72.   //**********************************
  73.   ColAtt_retTest3 = SQLAllocHandle(SQL_HANDLE_DBC, 
  74.    ColAtt_henvTest3, 
  75.    &ColAtt_hdbcTest3);
  76.   if (ColAtt_retTest3 == SQL_SUCCESS || ColAtt_retTest3 == SQL_SUCCESS_WITH_INFO)
  77.     ndbout << "Allocated a connection Handle!" << endl;
  78.   // *******************
  79.   // ** Connect to DB **
  80.   // *******************
  81.   ColAtt_retTest3 = SQLConnect(ColAtt_hdbcTest3, 
  82.        (SQLCHAR *) connectString(), 
  83.        SQL_NTS, 
  84.        (SQLCHAR *) "", 
  85.        SQL_NTS, 
  86.        (SQLCHAR *) "", 
  87.        SQL_NTS);
  88.   
  89.   if (ColAtt_retTest3 == SQL_SUCCESS || ColAtt_retTest3 == SQL_SUCCESS_WITH_INFO)
  90.     ndbout << "Connected to DB : OK!" << endl;
  91.   else 
  92.     {  
  93.       ndbout << "Failure to Connect DB!" << endl;
  94.       return NDBT_FAILED;
  95.     }
  96.   //*******************************
  97.   //** Allocate statement handle **
  98.   //*******************************
  99.   
  100.   ColAtt_retTest3 = SQLAllocHandle(SQL_HANDLE_STMT, 
  101.    ColAtt_hdbcTest3, 
  102.    &ColAtt_hstmtTest3); 
  103.   if(ColAtt_retTest3 == SQL_SUCCESS || ColAtt_retTest3 == SQL_SUCCESS_WITH_INFO) 
  104.     ndbout << "Allocated a statement handle!" << endl;
  105.   //************************
  106.   //** Define a statement **
  107.   //************************
  108.   /*
  109.   strcpy((char *) SQLStmt, 
  110.  "DELETE FROM Customers WHERE CustID = 6");
  111.    */
  112.     strcpy((char *) SQLStmt, 
  113.     "INSERT INTO Customers (CustID, Name, Address, Phone) VALUES (6, 'Jan', 'LM vag 8', '969696')");
  114.     /*
  115.     strcpy((char *) SQLStmt, 
  116.     "INSERT INTO Customers (CustID, Name, Address, Phone) VALUES (?, ?, ?, ?)");
  117.     */
  118.   //*****************************
  119.   //** Prepare  SQL statement  **
  120.   //*****************************
  121.   ColAtt_retTest3 = SQLPrepare(ColAtt_hstmtTest3, 
  122.   SQLStmt, 
  123.   SQL_NTS);
  124.   
  125.   if (ColAtt_retTest3 == SQL_SUCCESS || ColAtt_retTest3 == SQL_SUCCESS_WITH_INFO) 
  126.     {
  127.       //************************************
  128.       //** Display the name of column one **
  129.       //************************************
  130.       ColAtt_retTest3 = SQLColAttribute(ColAtt_hstmtTest3, 
  131. 1, 
  132. SQL_COLUMN_TYPE_NAME, 
  133. TypeName, 
  134. sizeof(TypeName), 
  135. &TypeNameLen, 
  136. NULL);
  137.    
  138.       if (ColAtt_retTest3 == SQL_ERROR || ColAtt_retTest3 == SQL_SUCCESS_WITH_INFO)
  139. {
  140.   ndbout << endl << "ColAtt_retTest3 = " << ColAtt_retTest3 << endl; 
  141.   ndbout << endl << "Name of column 1 is:" 
  142.  << (char *)TypeName <<endl;  
  143.   ColAtt_DisplayErrorTest3(SQL_HANDLE_STMT, ColAtt_hstmtTest3);
  144. }
  145.       //************************************
  146.       //** Display the name of column two **
  147.       //************************************
  148.       ColAtt_retTest3 = SQLColAttribute(ColAtt_hstmtTest3, 
  149. 2, 
  150. SQL_DESC_BASE_COLUMN_NAME, 
  151. TypeName, 
  152. sizeof(TypeName), 
  153. &TypeNameLen,
  154. NULL);
  155.       if (ColAtt_retTest3 == SQL_ERROR || ColAtt_retTest3 == SQL_SUCCESS_WITH_INFO)
  156. {
  157.   ndbout << endl << "ColAtt_retTest3 = " << ColAtt_retTest3 << endl;
  158.   ndbout << endl << "Name of column 2 is:" 
  159.  << (char *)TypeName <<endl; 
  160.   ColAtt_DisplayErrorTest3(SQL_HANDLE_STMT, ColAtt_hstmtTest3);
  161. }
  162.       
  163.       //***************************************
  164.       //**  Display the name of column three **
  165.       //***************************************
  166.       ColAtt_retTest3 = SQLColAttribute(ColAtt_hstmtTest3, 
  167. 3, 
  168. SQL_DESC_BASE_COLUMN_NAME, 
  169. TypeName, 
  170. sizeof(TypeName), 
  171. &TypeNameLen, 
  172. NULL);
  173.       if (ColAtt_retTest3 == SQL_ERROR || ColAtt_retTest3 == SQL_SUCCESS_WITH_INFO)
  174. {
  175.   ndbout << "ColAtt_retTest3 = " << ColAtt_retTest3 << endl;
  176.   ndbout << endl << "Name of column 3 is:" 
  177.  << (char *)TypeName <<endl; 
  178.   ColAtt_DisplayErrorTest3(SQL_HANDLE_STMT, ColAtt_hstmtTest3);
  179.         }
  180.       //**************************************
  181.       //**  Display the name of column four **
  182.       //**************************************
  183.       ColAtt_retTest3 = SQLColAttribute(ColAtt_hstmtTest3, 
  184. 4, 
  185. SQL_DESC_BASE_COLUMN_NAME, 
  186. TypeName, 
  187. sizeof(TypeName), 
  188. &TypeNameLen, 
  189. NULL);
  190.       if (ColAtt_retTest3 == SQL_ERROR || ColAtt_retTest3 == SQL_SUCCESS_WITH_INFO)
  191. {
  192.   ndbout << "ColAtt_retTest3 = " << ColAtt_retTest3 << endl;
  193.   ndbout << endl << "Name of column 4 is:" 
  194.  << (char *)TypeName <<endl; 
  195.   ColAtt_DisplayErrorTest3(SQL_HANDLE_STMT, ColAtt_hstmtTest3);
  196. }
  197.       
  198.     }
  199.   // *********************************
  200.   // ** Disconnect and Free Handles **
  201.   // *********************************  
  202.   SQLDisconnect(ColAtt_hdbcTest3);
  203.   SQLFreeHandle(SQL_HANDLE_STMT, ColAtt_hstmtTest3);
  204.   SQLFreeHandle(SQL_HANDLE_DBC, ColAtt_hdbcTest3);
  205.   SQLFreeHandle(SQL_HANDLE_ENV, ColAtt_henvTest3);
  206.   return NDBT_OK;
  207. }
  208. void ColAtt_DisplayErrorTest3(SQLSMALLINT ColAttTest3_HandleType, 
  209.       SQLHSTMT ColAttTest3_InputHandle)
  210. {
  211.   SQLSMALLINT ColAtt_i = 1;
  212.   SQLRETURN ColAtt_SQLSTATEs;
  213.   SQLCHAR ColAtt_Sqlstate[5];
  214.   SQLCHAR ColAtt_Msg[MAXIMUM_MESSAGE_LENGTH_Test3];
  215.   SQLSMALLINT ColAtt_MsgLen;
  216.   SQLINTEGER  ColAtt_NativeError;
  217.   ndbout << "-------------------------------------------------" << endl;
  218.   ndbout << "Error diagnostics:" << endl;
  219.   
  220.   while ((ColAtt_SQLSTATEs = SQLGetDiagRec(ColAttTest3_HandleType, 
  221.    ColAttTest3_InputHandle, 
  222.    ColAtt_i, 
  223.    ColAtt_Sqlstate, 
  224.    &ColAtt_NativeError, 
  225.    ColAtt_Msg, 
  226.    sizeof(ColAtt_Msg), 
  227.    &ColAtt_MsgLen)) 
  228.  != SQL_NO_DATA)                   
  229.     {
  230.       
  231.       ndbout << "the HandleType is:" << ColAttTest3_HandleType << endl;
  232.       ndbout << "the InputHandle is :" << (long)ColAttTest3_InputHandle << endl;
  233.       ndbout << "the ColAtt_Msg is: " << (char *) ColAtt_Msg << endl;
  234.       ndbout << "the output state is:" << (char *)ColAtt_Sqlstate << endl; 
  235.       
  236.       ColAtt_i ++;
  237.       break;
  238.     }
  239.   ndbout << "-------------------------------------------------" << endl;
  240. }