/**********************************************************************
* FILENAME :        DropTable.c
*
* DESCRIPTION :
*       Simple example used to DROP a table from the test suite
*
* ODBC USAGE :
* 		Prompts for table no
* 		SQLExecDirect - to execute DROP TABLE statement
*
*/
#include <stdio.h>
#include <stdlib.h>
#include <sql.h>
#include <sqlext.h>
#include <string.h>

#include "util.c"

int main () {

    SQLHENV  henv  = SQL_NULL_HENV;   	// Environment
    SQLHDBC  hdbc  = SQL_NULL_HDBC;   	// Connection handle
    SQLHSTMT hstmt = SQL_NULL_HSTMT;  	// Statement handle
    SQLRETURN retcode;			// Return status

	// The names of the tables in the test suite
	char sqlStatement[9][64]= {
	{"DROP TABLE TestTBL1"},
	{"DROP TABLE TestTBL1Copy"},
	{"DROP TABLE TestTBL2"},
	{"DROP TABLE TestTBL3"},
	{"DROP TABLE TestTBL4"},
	{"DROP TABLE TestTBL5"},
	{"DROP TABLE TestTBL6"},
	{"DROP TABLE TestTBL7"},
	{"DROP TABLE TestTBL8"}
	};

    int tableNo=-1;
    char confirm='Y';
    char reply=' ';

    // Allocate an environment handle
    retcode=SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv);
    CHECK_ERROR(retcode, "SQLAllocHandle(SQL_HANDLE_ENV)",
                henv, SQL_HANDLE_ENV);

    // We want ODBC 3 support
    retcode = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION,
                                        (void *) SQL_OV_ODBC3, 0);
    CHECK_ERROR(retcode, "SQLSetEnvAttr(SQL_ATTR_ODBC_VERSION)",
                henv, SQL_HANDLE_ENV);

    // Allocate a connection handle
    retcode = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);
    CHECK_ERROR(retcode, "SQLAllocHandle(SQL_HANDLE_DBC)",
                hdbc, SQL_HANDLE_DBC);

    // Connect to the DSN
    retcode=SQLDriverConnect(hdbc, NULL, "DSN=DATASOURCE;", SQL_NTS, NULL, 0,
                             NULL, SQL_DRIVER_COMPLETE);
    CHECK_ERROR(retcode, "SQLDriverConnect(DSN=DATASOURCE;)",
                hdbc, SQL_HANDLE_DBC);

    // Allocate a statement handle
    retcode=SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);
    CHECK_ERROR(retcode, "SQLAllocHandle(SQL_HANDLE_STMT)",
                hstmt, SQL_HANDLE_STMT);


    while (tableNo!=0) {
        reply=getInt ("Which Table\n0 (Quit)"
                        "\n1 (TestTBL1 ID)"
                        "\n2 (TestTBL1Copy ID)"
                        "\n3 (TestTBL2 NoID)"
                        "\n4 (TestTBL3 Memo1)"
                        "\n5 (TestTBL4 Memo1, Memo2)"
                        "\n6 (TestTBL5 PK FK in 8)"
                        "\n7 (TestTBL6 FK in 5)"
                        "\n8 (TestTBL7 FK in 5)"
                        "\n9 (TestTBL8 PK)"
                        "\n  ?", &tableNo, confirm, 0);

        if (tableNo!=0 && (reply == 'Y' || reply =='y')) {
    		printf ("Sending %s\n", &sqlStatement[tableNo-1][0]);
    		retcode = SQLExecDirect(hstmt, &sqlStatement[tableNo-1][0],
                                                                SQL_NTS);
    		if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) {
    			printf ("Table Dropped\n");
    		}
    		else {
    			printf ("Table Drop Failed: %i\n", (int) retcode);
    			CHECK_ERROR(retcode, "SQLExecDirect()",
                            hstmt, SQL_HANDLE_STMT);
    		}
    	}
    }

exit:

    printf ("\nComplete.\n");

    // Free handles
    // Statement
    if (hstmt != SQL_NULL_HSTMT)
        SQLFreeHandle(SQL_HANDLE_STMT, hstmt);

    // Connection
    if (hdbc != SQL_NULL_HDBC) {
        SQLDisconnect(hdbc);
        SQLFreeHandle(SQL_HANDLE_DBC, hdbc);
    }

    // Environment
    if (henv != SQL_NULL_HENV)
        SQLFreeHandle(SQL_HANDLE_ENV, henv);

    return 0;
}

Further information