diff --git a/src/backends/db2/statement.cpp b/src/backends/db2/statement.cpp index 6a06c32a6..72abbe5b9 100644 --- a/src/backends/db2/statement.cpp +++ b/src/backends/db2/statement.cpp @@ -34,7 +34,20 @@ void db2_statement_backend::alloc() void db2_statement_backend::clean_up() { - SQLFreeHandle(SQL_HANDLE_STMT,hStmt); + SQLRETURN cliRC = SQL_SUCCESS; + + cliRC=SQLFreeStmt(hStmt,SQL_CLOSE); + if (cliRC != SQL_SUCCESS) { + throw db2_soci_error(db2_soci_error::sqlState("Statement handle close error",SQL_HANDLE_STMT,hStmt),cliRC); + } + cliRC=SQLFreeStmt(hStmt,SQL_UNBIND); + if (cliRC != SQL_SUCCESS) { + throw db2_soci_error(db2_soci_error::sqlState("Statement handle unbind error",SQL_HANDLE_STMT,hStmt),cliRC); + } + cliRC=SQLFreeHandle(SQL_HANDLE_STMT,hStmt); + if (cliRC != SQL_SUCCESS) { + throw db2_soci_error(db2_soci_error::sqlState("Statement handle clean-up error",SQL_HANDLE_STMT,hStmt),cliRC); + } } void db2_statement_backend::prepare(std::string const & query ,