#include <stdio.h> #include <stdlib.h> #include "iodbc/iodbc.h" #include "iodbc/isqlext.h" SQLCHAR DSN[10] = "RHDB"; // The following should be changed to your userid and password // and the length of the variable should be the actual length + 1 SQLCHAR DSN_userid[9] = "postgres"; SQLCHAR DSN_password[9] = "postgres"; int Initialize(HENV * phenv, HDBC * phdbc, HSTMT * phstmt); void cleanup(HENV henv, HDBC hdbc, HSTMT hstmt); // Allocate the environment, connection, statement handles int Initialize(HENV * phenv, HDBC * phdbc, HSTMT * phstmt) { int res; // Allocate an environment handle res = SQLAllocEnv(phenv); if (res != SQL_SUCCESS) { fprintf(stderr, "Unable to allocate environment handle (ret=%d)\n", res); exit(1); } // Allocate a connection handle res = SQLAllocConnect(*phenv, phdbc); if (res != SQL_SUCCESS) { fprintf(stderr, "Unable to allocate connection handle (ret=%d)\n", res); cleanup(*phenv, *phdbc, *phstmt); exit(1); } // The connection parameters printf("Connection Parameters: DSN='%s', UID='%s', PWD='%s'\n", DSN, DSN_userid, DSN_password); // Connect to the database res = SQLConnect(*phdbc, DSN, SQL_NTS, DSN_userid, SQL_NTS, DSN_password, SQL_NTS); if (res != SQL_SUCCESS) { fprintf(stderr, "Unable to connect to datasource (ret=%d)\n", res); cleanup(*phenv, *phdbc, *phstmt); exit(1); } // Allocate a statement handle res = SQLAllocStmt(*phdbc, phstmt); if (res != SQL_SUCCESS) { fprintf(stderr, "Unable to allocate statement handle (ret=%d)\n", res); cleanup(*phenv, *phdbc, *phstmt); exit(1); } printf("Handles initialized.\n"); return 0; } // Cleanup before exit void cleanup(HENV henv, HDBC hdbc, HSTMT hstmt) { // Disconnect from the database and free all handles SQLFreeStmt(hstmt, SQL_CLOSE); SQLDisconnect(hdbc); SQLFreeConnect(hdbc); SQLFreeEnv(henv); return; } |
#include <stdio.h> #include <stdlib.h> #include "iodbc/iodbc.h" #include "iodbc/isqlext.h" #include "Initialize.h" int main(int argc, char *argv[]) { HENV henv; HDBC hdbc; HSTMT hstmt; SQLCHAR SelectStmt[255]; int res; if (argc != 2) { fprintf(stderr, "Usage: PrepAndExec <SQL Statement>\n"); exit(1); } else { if (strlen (argv[1]) > 254) { fprintf(stderr, "SQL statement is longer than 254 characters\n"); exit(1); } strncpy((char *) SelectStmt, argv[1], 255); } // Allocate all handles res = Initialize(&henv, &hdbc, &hstmt); if (res != 0) { fprintf(stderr, "Unable to initialize (ret=%d)\n", res); exit(1); } // Prepare the user provided SQL statement res = SQLPrepare(hstmt, SelectStmt, SQL_NTS); if (res != SQL_SUCCESS) { fprintf(stderr, "Unable to prepare statement (ret=%d)\n", res); // Disconnect from the database and free all handles cleanup(henv, hdbc, hstmt); exit(1); } // Execute the SQL Statement res = SQLExecute(hstmt); if (res != SQL_SUCCESS) { fprintf(stderr, "Unable to execute statement (ret=%d)\n", res); // Disconnect from the database and free all handles cleanup(henv, hdbc, hstmt); exit(1); } printf("'%s' prepared and executed.\n", SelectStmt); cleanup(henv, hdbc, hstmt); return 0; } |
#include <stdio.h> #include <stdlib.h> #include "iodbc/iodbc.h" #include "iodbc/isqlext.h" #include "Initialize.h" int main(int argc, char *argv[]) { HENV henv; HDBC hdbc; HSTMT hstmt; SQLCHAR SelectStmt[255]; int res; if (argc != 2) { fprintf(stderr, "Usage: ExecDirect <SQL Statement>\n"); exit(1); } else { if (strlen (argv[1]) > 254) { fprintf(stderr, "SQL statement is longer than 254 characters\n"); exit(1); } strncpy((char *) SelectStmt, argv[1], 255); } // Allocate all handles res = Initialize(&henv, &hdbc, &hstmt); if (res != 0) { fprintf("Unable to initialize (ret=%d)\n", res); exit(1); } // Prepare and execute the user provided SQL statement res = SQLExecDirect(hstmt, SelectStmt, SQL_NTS); if (res != SQL_SUCCESS) { fprintf("Unable to execute statement directly (ret=%d)\n", res); // Disconnect from the database and free all handles cleanup(henv, hdbc, hstmt); exit(1); } printf("'%s' directly executed.\n", SelectStmt); cleanup(henv, hdbc, hstmt); return 0; } |
#include <stdio.h> #include <stdlib.h> #include "iodbc/iodbc.h" #include "iodbc/isqlext.h" #include "Initialize.h" int main(int argc, char *argv[]) { HENV henv; HDBC hdbc; HSTMT hstmt; SQLCHAR SelectStmt[255], cname1[25], cname2[50]; int res; if (argc != 1) { fprintf(stderr, "Usage: ViewTable\n"); exit(1); } // Allocate all handles res = Initialize(&henv, &hdbc, &hstmt); if (res != 0) { fprintf(stderr, "Unable to initialize (ret=%d)\n", res); exit(1); } // Create the query strcpy((char *) SelectStmt, "SELECT * FROM players"); // Prepare and execute the SQL statement res = SQLExecDirect(hstmt, SelectStmt, SQL_NTS); if (res != SQL_SUCCESS) { fprintf(stderr, "Unable to execute statement directly (ret=%d)\n", res); // Disconnect from the database and free all handles cleanup(henv, hdbc, hstmt); exit(1); } // Bind the columns in the result data set returned to // application variables res = SQLBindCol(hstmt, 1, SQL_C_CHAR, cname1, sizeof(cname1), NULL); if (res != SQL_SUCCESS) { fprintf(stderr, "Unable to bind column 1 (ret=%d)\n", res); cleanup(henv, hdbc, hstmt); exit(1); } res = SQLBindCol(hstmt, 2, SQL_C_CHAR, cname2, sizeof(cname2), NULL); if (res != SQL_SUCCESS) { fprintf(stderr, "Unable to bind column 2 (ret=%d)\n", res); cleanup(henv, hdbc, hstmt); exit(1); } printf("\nContent of players:\n"); printf("******************\n"); // While there are remaining rows in the result set, // retrieve and display them res = SQLFetch(hstmt); while (res != SQL_NO_DATA_FOUND) { if (res != SQL_SUCCESS && res != SQL_SUCCESS_WITH_INFO) { fprintf(stderr, "Unable to fetch row (ret=%d)\n", res); cleanup(henv, hdbc, hstmt); exit(1); } printf("%s -- %s \n", cname1, cname2); res = SQLFetch(hstmt); } cleanup(henv, hdbc, hstmt); return 0; } |
#include <stdio.h> #include <stdlib.h> #include "iodbc/iodbc.h" #include "iodbc/isqlext.h" #include "Initialize.h" int main(int argc, char *argv[]) { HENV henv; HDBC hdbc; HSTMT hstmt; SQLCHAR SelectStmt[255]; int res, commit = -1; if (argc != 2) { fprintf(stderr, "Usage: Transact <action>\n"); fprintf(stderr, "action=1 to commit, action=0 to rollback"); exit(1); } else { if (atoi(argv[1]) == 1) { commit = 1; } else if (atoi(argv[1]) == 0) { commit = 0; } else { fprintf(stderr, "Usage: Transact <action>\n"); fprintf(stderr, "action=1 to commit, action=0 to rollback"); exit(1); } } // Allocate all handles res = Initialize(&henv, &hdbc, &hstmt); if (res != 0) { fprintf(stderr, "Unable to initialize (ret=%d)\n", res); exit(1); } // Turn AUTOCOMMIT off so SQL statements can be grouped into a // transaction res = SQLSetConnectOption(hdbc, SQL_AUTOCOMMIT, SQL_AUTOCOMMIT_OFF); if (res != SQL_SUCCESS) { fprintf(stderr, "Unable to turn AUTOCOMMIT off (ret=%d)\n", res); cleanup(henv, hdbc, hstmt); exit(1); } // Create update string strcpy((char *) SelectStmt, "INSERT into players VALUES "); strcat((char *) SelectStmt, "(\'Tracy McGrady\', \'Orlando Magic\')"); // Execute the SQL statement res = SQLExecDirect(hstmt, SelectStmt, SQL_NTS); if (res != SQL_SUCCESS) { fprintf(stderr, "Unable to directly execute statement (ret=%d)\n", res); // Disconnect from the database and free all handles cleanup(henv, hdbc, hstmt); exit(1); } // Create delete string strcpy((char *) SelectStmt, "DELETE FROM players WHERE "); strcat((char *) SelectStmt, "name=\'Michael Jordan\'"); // Execute the SQL statement res = SQLExecDirect(hstmt, SelectStmt, SQL_NTS); if (res != SQL_SUCCESS) { fprintf(stderr, "Unable to directly execute statement (ret=%d)\n", res); // Disconnect from the database and free all handles cleanup(henv, hdbc, hstmt); exit(1); } // Commit or rollback the transaction if (commit == 1) { res = SQLTransact(henv, hdbc, SQL_COMMIT); printf("Transaction committed\n", res); } else { res = SQLTransact(henv, hdbc, SQL_ROLLBACK); printf("Transaction rolled back\n", res); } if (res != SQL_SUCCESS) { fprintf(stderr, "Unable to commit the transaction (ret=%d)\n", res); cleanup(henv, hdbc, hstmt); exit(1); } cleanup(henv, hdbc, hstmt); return 0; } |