📄 sqlcolattributetest2.cpp
字号:
/* Copyright (C) 2003 MySQL AB This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ /** * @file SQLColAttributeTest2.cpp */#include <common.hpp>using namespace std;#define MAXIMUM_MESSAGE_LENGTH_Test2 200#define BufferLengthTest2 156SQLHSTMT ColAtt_hstmtTest2;SQLHSTMT ColAtt_hdbcTest2;SQLHENV ColAtt_henvTest2;SQLHDESC ColAtt_hdescTest2;SQLCHAR CharacterAttributePtrTest2;SQLINTEGER NumericAttributePtrTest2;SQLSMALLINT StringLengthPtrTest2;SQLRETURN ColAtt_retTest2;void ColAtt_DisplayErrorTest2(SQLSMALLINT ColAttTest2_HandleType, SQLHSTMT ColAttTest2_InputHandle);/** * Test returning descriptor information * * Test: * -# Call SQLColAttribute without preceeding SQLExecute * -# Let TYPE is 'ITEM' in Table 20, FieldIdentifer is zero * -# Let TYPE is 'ITEM' in Table 20, ColumnNumber is less than one * -# FieldIdentifer is not one of the code valuess in Table 20 * -# Let TYPE is 'ITEM' in Table 20, ColumnNumber is greater than 1044 * * @return Zero, if test succeeded */int SQLColAttributeTest2(){ ndbout << endl << "Start SQLColAttribute Testing2" << endl; SQLCHAR SQLStmt [120]; //******************************************************************* //** Test ** //** ** //** hstmt ** //** Prepare a statement without executing the statement ** //** ** //** Intended result: table Customer should not have new row ** //******************************************************************* //************************************ //** Allocate An Environment Handle ** //************************************ ColAtt_retTest2 = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &ColAtt_henvTest2); if (ColAtt_retTest2 == SQL_SUCCESS || ColAtt_retTest2 == SQL_SUCCESS_WITH_INFO) ndbout << "Allocated an environment Handle!" << endl; //********************************************* //** Set the ODBC application Version to 3.x ** //********************************************* ColAtt_retTest2 = SQLSetEnvAttr(ColAtt_henvTest2, SQL_ATTR_ODBC_VERSION, (SQLPOINTER) SQL_OV_ODBC3, SQL_IS_UINTEGER); if (ColAtt_retTest2 == SQL_SUCCESS || ColAtt_retTest2 == SQL_SUCCESS_WITH_INFO) ndbout << "Set the ODBC application Version to 2.x!" << endl; //********************************** //** Allocate A Connection Handle ** //********************************** ColAtt_retTest2 = SQLAllocHandle(SQL_HANDLE_DBC, ColAtt_henvTest2, &ColAtt_hdbcTest2); if (ColAtt_retTest2 == SQL_SUCCESS || ColAtt_retTest2 == SQL_SUCCESS_WITH_INFO) ndbout << "Allocated a connection Handle!" << endl; // ******************* // ** Connect to DB ** // ******************* ColAtt_retTest2 = SQLConnect(ColAtt_hdbcTest2, (SQLCHAR *) connectString(), SQL_NTS, (SQLCHAR *) "", SQL_NTS, (SQLCHAR *) "", SQL_NTS); if (ColAtt_retTest2 == SQL_SUCCESS || ColAtt_retTest2 == SQL_SUCCESS_WITH_INFO) ndbout << "Connected to DB : OK!" << endl; else { ndbout << "Failure to Connect DB!" << endl; return NDBT_FAILED; } //******************************* //** Allocate statement handle ** //******************************* ColAtt_retTest2 = SQLAllocHandle(SQL_HANDLE_STMT, ColAtt_hdbcTest2, &ColAtt_hstmtTest2); if(ColAtt_retTest2 == SQL_SUCCESS || ColAtt_retTest2 == SQL_SUCCESS_WITH_INFO) ndbout << "Allocated a statement handle!" << endl; //************************ //** Define a statement ** //************************ /* strcpy((char *) SQLStmt, "DELETE FROM Customers WHERE CustID = 6"); */ strcpy((char *) SQLStmt, "INSERT INTO Customers (CustID, Name, Address, Phone) VALUES (6, 'Jan', 'LM vag 8', '969696')"); /* strcpy((char *) SQLStmt, "INSERT INTO Customers (CustID, Name, Address, Phone) VALUES (?, ?, ?, ?)"); */ //******************************** //** Prepare SQL statement ** //******************************** ColAtt_retTest2 = SQLPrepare(ColAtt_hstmtTest2, SQLStmt, SQL_NTS); if (ColAtt_retTest2 == SQL_SUCCESS || ColAtt_retTest2 == SQL_SUCCESS_WITH_INFO) { //************************************************************** //** FieldIdentifer is not one of the code valuess in Table 20, //** "Codes used for descriptor fields" //************************************************************** ColAtt_retTest2 = SQLColAttribute(ColAtt_hstmtTest2, 2, 9999, &CharacterAttributePtrTest2, BufferLengthTest2, &StringLengthPtrTest2, &NumericAttributePtrTest2); if (ColAtt_retTest2 == SQL_ERROR || ColAtt_retTest2 == SQL_SUCCESS_WITH_INFO) { ndbout << endl << "FieldIdentifer is not one of the" << endl; ndbout << "code valuess in Table 20, Codes used for" << endl; ndbout << "descriptor fields" <<endl; ColAtt_DisplayErrorTest2(SQL_HANDLE_STMT, ColAtt_hstmtTest2); } //**************************************************************** //** Let TYPE is 'ITEM' in Table 20, ColumnNumber is less than one //**************************************************************** ColAtt_retTest2 = SQLColAttribute(ColAtt_hstmtTest2, -1, SQL_DESC_BASE_COLUMN_NAME, &CharacterAttributePtrTest2, BufferLengthTest2, &StringLengthPtrTest2, &NumericAttributePtrTest2); if (ColAtt_retTest2 == SQL_ERROR || ColAtt_retTest2 == SQL_SUCCESS_WITH_INFO) { ndbout << "Let TYPE is 'ITEM' in Table 20,ColumnNumber" << "is less than one" << endl; ColAtt_DisplayErrorTest2(SQL_HANDLE_STMT, ColAtt_hstmtTest2); } //********************************************************* //** Let TYPE is 'ITEM' in Table 20, FieldIdentifer is zero //********************************************************* ColAtt_retTest2 = SQLColAttribute(ColAtt_hstmtTest2, 1018, 0, &CharacterAttributePtrTest2, BufferLengthTest2, &StringLengthPtrTest2, &NumericAttributePtrTest2); if (ColAtt_retTest2 == SQL_ERROR || ColAtt_retTest2 == SQL_SUCCESS_WITH_INFO) { ndbout << "Let TYPE is 'ITEM' in Table 20, FieldIdentifer" << " is zero" <<endl; ColAtt_DisplayErrorTest2(SQL_HANDLE_STMT, ColAtt_hstmtTest2); } //********************************************************** //** Let TYPE is 'ITEM' in Table 20, ColumnNumber is greater //** than TOP_LEVEL_COUNT(1044) //********************************************************* ColAtt_retTest2 = SQLColAttribute(ColAtt_hstmtTest2, 1045, SQL_DESC_BASE_COLUMN_NAME, &CharacterAttributePtrTest2, BufferLengthTest2, &StringLengthPtrTest2, &NumericAttributePtrTest2); if (ColAtt_retTest2 == SQL_ERROR || ColAtt_retTest2 == SQL_SUCCESS_WITH_INFO) { ndbout << "Let TYPE is 'ITEM' in Table 20, ColumnNumber" << endl << "is greater than TOP_LEVEL_COUNT(1044)" << endl; ColAtt_DisplayErrorTest2(SQL_HANDLE_STMT, ColAtt_hstmtTest2); } } // ********************************* // ** Disconnect and Free Handles ** // ********************************* SQLDisconnect(ColAtt_hdbcTest2); SQLFreeHandle(SQL_HANDLE_STMT, ColAtt_hstmtTest2); SQLFreeHandle(SQL_HANDLE_DBC, ColAtt_hdbcTest2); SQLFreeHandle(SQL_HANDLE_ENV, ColAtt_henvTest2); return NDBT_OK;}void ColAtt_DisplayErrorTest2(SQLSMALLINT ColAttTest2_HandleType, SQLHSTMT ColAttTest2_InputHandle){ SQLSMALLINT ColAtt_i = 1; SQLRETURN ColAtt_SQLSTATEs; SQLCHAR ColAtt_Sqlstate[5]; SQLCHAR ColAtt_Msg[MAXIMUM_MESSAGE_LENGTH_Test2]; SQLSMALLINT ColAtt_MsgLen; SQLINTEGER ColAtt_NativeError; ndbout << "-------------------------------------------------" << endl; ndbout << "Error diagnostics:" << endl; while ((ColAtt_SQLSTATEs = SQLGetDiagRec(ColAttTest2_HandleType, ColAttTest2_InputHandle, ColAtt_i, ColAtt_Sqlstate, &ColAtt_NativeError, ColAtt_Msg, sizeof(ColAtt_Msg), &ColAtt_MsgLen)) != SQL_NO_DATA) { ndbout << "the HandleType is:" << ColAttTest2_HandleType << endl; ndbout << "the InputHandle is :" << (long)ColAttTest2_InputHandle << endl; ndbout << "the ColAtt_Msg is: " << (char *) ColAtt_Msg << endl; ndbout << "the output state is:" << (char *)ColAtt_Sqlstate << endl; ColAtt_i ++; break; } ndbout << "-------------------------------------------------" << endl;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -