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

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. #include <NdbOut.hpp>
  14. #include <sqlcli.h>
  15. #include <stdio.h>
  16. using namespace std;
  17. SQLHDBC     hdbc;
  18. SQLHSTMT    hstmt;
  19. SQLHENV     henv;
  20. SQLHDESC    hdesc;
  21. SQLINTEGER  strangehandle;
  22. SQLRETURN   retcode, SQLSTATEs;
  23. SQLCHAR Sqlstate[5];
  24. SQLINTEGER    NativeError;
  25. SQLSMALLINT   i, MsgLen;
  26. SQLCHAR   Msg[SQL_MAXIMUM_MESSAGE_LENGTH];
  27. SQLSMALLINT StringLengthPtr;
  28. SQLINTEGER DiagInfoPtr1;
  29. SQLCHAR    DiagInfoPtr2;
  30. SQLRETURN  DiagInfoPtr3;
  31.        
  32. void DisplayError(SQLSMALLINT HandleType, SQLHSTMT InputHandle);
  33. int SQLGetDiagFieldTest ()
  34. {
  35.   strangehandle = 67;
  36.   /* hstmt */
  37.   // Execute a statement to retrieve rows from the Customers table. We can create the table and inside rows in 
  38.   // NDB by another program TestDirectSQL 
  39.   // const SQLCHAR *StatementText = "SELECT CustID, Name, Address, Phone FROM Customers";
  40.   // retcode = SQLPrepare(hstmt, (SQLCHAR*)"SELECT CustID, Name, Address, Phone FROM Customers", 56);
  41.   retcode = SQLPrepare(hstmt, (SQLCHAR*)"SELECT CustID, Name, Address, Phone FROM Customers", SQL_NTS);
  42.   if (retcode == SQL_SUCCESS_WITH_INFO || retcode == SQL_SUCCESS) {
  43.      i = 1;
  44. while ((SQLSTATEs = SQLGetDiagField(67, 67, i, SQL_DIAG_CURSOR_ROW_COUNT, &DiagInfoPtr1, 128, &StringLengthPtr)) != SQL_NO_DATA) {
  45.      if (SQLSTATEs == SQL_ERROR || retcode == SQL_SUCCESS_WITH_INFO) {
  46.      ndbout << "the HandleType is:" << HandleType << endl;
  47.      ndbout << "the InputHandle is :" << InputHandle << endl;
  48.      ndbout << "the output state is:" << (char *)Sqlstate << endl; 
  49.                                                                      }
  50.      i ++;
  51.                                                                                                                                    }
  52.                                                                   }
  53.  
  54.   /* HandleType indicates ENVIRNMENT HANDLE and Handle does not identify an allocated SQL_environment */
  55.   retcode = SQLPrepare(hstmt, (SQLCHAR*)"SELECT CustID, Name, Address, Phone FROM Customers", SQL_NTS);
  56.   if (retcode == SQL_SUCCESS_WITH_INFO || retcode == SQL_SUCCESS) {
  57.      i = 1;
  58. while ((SQLSTATEs = SQLGetDiagField(SQL_HANDLE_ENV, hdbc, i, SQL_DIAG_CURSOR_ROW_COUNT, &DiagInfoPtr1, 128, &StringLengthPtr)) != SQL_NO_DATA)                   {
  59.      if (SQLSTATEs == SQL_ERROR || retcode == SQL_SUCCESS_WITH_INFO) {
  60.      ndbout << "the HandleType is:" << HandleType << endl;
  61.      ndbout << "the InputHandle is :" << InputHandle << endl;
  62.      ndbout << "the output state is:" << (char *)Sqlstate << endl; 
  63.                                                                      }
  64.      i ++;
  65.                                                          }
  66.                                                                   }
  67.   /*  HandleType indicates CONNECTION HANDLE and Handle does not identify an allocated SQL_connection */
  68.   retcode = SQLPrepare(hstmt, (SQLCHAR*)"SELECT CustID, Name, Address, Phone FROM Customers", SQL_NTS);
  69.   if (retcode == SQL_SUCCESS_WITH_INFO || retcode == SQL_SUCCESS) {
  70.      i = 1;
  71. while ((SQLSTATEs = SQLGetDiagField(SQL_HANDLE_DBC, henv, i, SQL_DIAG_CURSOR_ROW_COUNT, &DiagInfoPtr1, 128, &StringLengthPtr)) != SQL_NO_DATA)                   {
  72.      if (SQLSTATEs == SQL_ERROR || retcode == SQL_SUCCESS_WITH_INFO) {
  73.      ndbout << "the HandleType is:" << HandleType << endl;
  74.      ndbout << "the InputHandle is :" << InputHandle << endl;
  75.      ndbout << "the output state is:" << (char *)Sqlstate << endl; 
  76.                                                                      }
  77.      i ++;
  78.                                                          }
  79.                                                                   }
  80.   /*  HandleType indicates STATEMENT HANDLE and Handle does not identify an allocated SQL_statement */
  81.   retcode = SQLPrepare(hstmt, (SQLCHAR*)"SELECT CustID, Name, Address, Phone FROM Customers", SQL_NTS);
  82.   if (retcode == SQL_SUCCESS_WITH_INFO || retcode == SQL_SUCCESS) {
  83.      i = 1;
  84. while ((SQLSTATEs = SQLGetDiagField(SQL_HANDLE_STMT, hdbc, i, SQL_DIAG_CURSOR_ROW_COUNT, &DiagInfoPtr1, 128, &StringLengthPtr)) != SQL_NO_DATA)                   {
  85.      if (SQLSTATEs == SQL_ERROR || retcode == SQL_SUCCESS_WITH_INFO) {
  86.      ndbout << "the HandleType is:" << HandleType << endl;
  87.      ndbout << "the InputHandle is :" << InputHandle << endl;
  88.      ndbout << "the output state is:" << (char *)Sqlstate << endl; 
  89.                                                                      }
  90.      i ++;
  91.                                                          }
  92.                                                                   }
  93.   /*  HandleType indicates DESCRIPTOR HANDLE and Handle does not identify an allocated SQL_descriptor */
  94.   retcode = SQLPrepare(hstmt, (SQLCHAR*)"SELECT CustID, Name, Address, Phone FROM Customers", SQL_NTS);
  95.   if (retcode == SQL_SUCCESS_WITH_INFO || retcode == SQL_SUCCESS) {
  96.      i = 1;
  97. while ((SQLSTATEs = SQLGetDiagField(SQL_HANDLE_DESC, hdbc, i, SQL_DIAG_CURSOR_ROW_COUNT, &DiagInfoPtr1, 128, &StringLengthPtr)) != SQL_NO_DATA)                   {
  98.      if (SQLSTATEs == SQL_ERROR || retcode == SQL_SUCCESS_WITH_INFO) {
  99.      ndbout << "the HandleType is:" << HandleType << endl;
  100.      ndbout << "the InputHandle is :" << InputHandle << endl;
  101.      ndbout << "the output state is:" << (char *)Sqlstate << endl; 
  102.                                                                      }
  103.      i ++;
  104.                                                          }
  105.                                                                   }
  106.   /* DiagIdentifer is not one of the code values in Table12 */
  107.   retcode = SQLPrepare(hstmt, (SQLCHAR*)"SELECT CustID, Name, Address, Phone FROM Customers", SQL_NTS);
  108.   if (retcode == SQL_SUCCESS_WITH_INFO || retcode == SQL_SUCCESS) {
  109.      
  110. where ((SQLSTATEs = SQLGetDiagField(SQL_HANDLE_DBC, hdbc, -1, 99, &DiagInfoPtr1, 128, &StringLengthPtr)) != SQL_NO_DATA) {
  111.      if (SQLSTATEs == SQL_ERROR || retcode == SQL_SUCCESS_WITH_INFO) {
  112.      ndbout << "the HandleType is:" << HandleType << endl;
  113.      ndbout << "the InputHandle is :" << InputHandle << endl;
  114.      ndbout << "the output state is:" << (char *)Sqlstate << endl; 
  115.                                                                      }
  116.      i ++;
  117.                                                          }
  118.                                                                   }
  119.   /*  If TYPE is 'STATUS' and RN is greater than N */
  120.   retcode = SQLPrepare(hstmt, (SQLCHAR*)"SELECT CustID, Name, Address, Phone FROM Customers", SQL_NTS);
  121.   if (retcode == SQL_SUCCESS_WITH_INFO || retcode == SQL_SUCCESS) {
  122.      
  123. where ((SQLSTATEs = SQLGetDiagField(SQL_HANDLE_DBC, hdbc, 9999, 8, &DiagInfoPtr2, 128, &StringLengthPtr)) != SQL_NO_DATA)   {
  124.      if (SQLSTATEs == SQL_ERROR || retcode == SQL_SUCCESS_WITH_INFO) {
  125.      ndbout << "the HandleType is:" << HandleType << endl;
  126.      ndbout << "the InputHandle is :" << InputHandle << endl;
  127.      ndbout << "the output state is:" << (char *)Sqlstate << endl; 
  128.                                                                      }
  129.      i ++;
  130.                                                          }
  131.                                                                   }
  132.   /*  If TYPE is 'STATUS' and RN is less than 1 */
  133.   retcode = SQLPrepare(hstmt, (SQLCHAR*)"SELECT CustID, Name, Address, Phone FROM Customers", SQL_NTS);
  134.   if (retcode == SQL_SUCCESS_WITH_INFO || retcode == SQL_SUCCESS) {
  135.      
  136.      where ((SQLSTATEs = SQLGetDiagField(SQL_HANDLE_DBC, hdbc, -1, 8,  &DiagInfoPtr2, 128, &StringLengthPtr)) != SQL_NO_DATA)  {
  137.      if (SQLSTATEs == SQL_ERROR || retcode == SQL_SUCCESS_WITH_INFO) {
  138.      ndbout << "the HandleType is:" << HandleType << endl;
  139.      ndbout << "the InputHandle is :" << InputHandle << endl;
  140.      ndbout << "the output state is:" << (char *)Sqlstate << endl; 
  141.                                                                      }
  142.      i ++;
  143.                                                          }
  144.                                                                   }
  145.   /*  If DI indicates ROW_COUNT and R is neither Execute nor ExecDirect, then an exception condition is raised */
  146.   retcode = SQLPrepare(hstmt, (SQLCHAR*)"SELECT CustID, Name, Address, Phone FROM Customers", SQL_NTS);
  147.   if (retcode == SQL_SUCCESS_WITH_INFO || retcode == SQL_SUCCESS) {
  148.      
  149. where ((SQLSTATEs = SQLGetDiagField(SQL_HANDLE_DBC, hdbc, i, SQL_DIAG_ROW_COUNT, &DiagInfoPtr1, 128, &StringLengthPtr)) != SQL_NO_DATA)  {
  150.      if (SQLSTATEs == SQL_ERROR || retcode == SQL_SUCCESS_WITH_INFO) {
  151.      ndbout << "the HandleType is:" << HandleType << endl;
  152.      ndbout << "the InputHandle is :" << InputHandle << endl;
  153.      ndbout << "the output state is:" << (char *)Sqlstate << endl; 
  154.                                                                      }
  155.      i ++;
  156.                                                          }
  157.                                                                   }
  158.   return 0;
  159.  }
  160. void DisplayError(SQLSMALLINT HandleType, SQLHSTMT InputHandle)
  161. {
  162.      i = 1;
  163.      while ((SQLSTATEs = SQLGetDiagRec(HandleType, InputHandle, i, 
  164.              Sqlstate, &NativeError, Msg, sizeof(Msg), 
  165.              &MsgLen)) != SQL_NO_DATA)                   {
  166.      ndbout << "the HandleType is:" << HandleType << endl;
  167.      ndbout << "the InputHandle is :" << InputHandle << endl;
  168.      ndbout << "the output state is:" << (char *)Sqlstate << endl; 
  169.      i ++;
  170.                                                          }
  171. }