Main Page | Class Hierarchy | Class List | Directories | File List | Class Members | File Members | Related Pages

MysqlPreparedStatementWrapper.cpp

Go to the documentation of this file.
00001 #include "../include/MysqlPreparedStatementWrapper.h"
00002 #include "../include/MysqlPreparedStatementResultSet.h"
00003 #include "../include/MysqlDatabaseLayer.h"
00004 #include "../include/DatabaseErrorCodes.h"
00005 
00006 #include "errmsg.h"
00007 
00008 MysqlPreparedStatementWrapper::MysqlPreparedStatementWrapper(MYSQL_STMT* pStatement)
00009  : DatabaseErrorReporter()
00010 {
00011   m_pStatement = pStatement;
00012 }
00013 
00014 MysqlPreparedStatementWrapper::~MysqlPreparedStatementWrapper()
00015 {
00016   Close();
00017 }
00018 
00019 void MysqlPreparedStatementWrapper::Close()
00020 {
00021   if (m_pStatement != NULL)
00022   {
00023     mysql_stmt_close(m_pStatement);
00024     m_pStatement = NULL;
00025   }
00026 }
00027 
00028 // set field
00029 void MysqlPreparedStatementWrapper::SetParam(int nPosition, int nValue)
00030 {
00031   m_Parameters.SetParam(nPosition, nValue);
00032 }
00033 
00034 void MysqlPreparedStatementWrapper::SetParam(int nPosition, double dblValue)
00035 {
00036   m_Parameters.SetParam(nPosition, dblValue);
00037 }
00038 
00039 void MysqlPreparedStatementWrapper::SetParam(int nPosition, const wxString& strValue)
00040 {
00041   m_Parameters.SetParam(nPosition, strValue);
00042 }
00043 
00044 void MysqlPreparedStatementWrapper::SetParam(int nPosition)
00045 {
00046   m_Parameters.SetParam(nPosition);
00047 }
00048 
00049 void MysqlPreparedStatementWrapper::SetParam(int nPosition, const void* pData, long nDataLength)
00050 {
00051   m_Parameters.SetParam(nPosition, pData, nDataLength);
00052 }
00053 
00054 void MysqlPreparedStatementWrapper::SetParam(int nPosition, const wxDateTime& dateValue)
00055 {
00056   m_Parameters.SetParam(nPosition, dateValue);
00057 }
00058 
00059 void MysqlPreparedStatementWrapper::SetParam(int nPosition, bool bValue)
00060 {
00061   m_Parameters.SetParam(nPosition, bValue);
00062 }
00063 
00064 int MysqlPreparedStatementWrapper::GetParameterCount()
00065 {
00066   return mysql_stmt_param_count(m_pStatement);
00067 }
00068 
00069 void MysqlPreparedStatementWrapper::RunQuery()
00070 {
00071   MYSQL_BIND* pBoundParameters = m_Parameters.GetMysqlParameterBindings();
00072 
00073   int nBindReturn = mysql_stmt_bind_param(m_pStatement, pBoundParameters);
00074   if (nBindReturn != 0)
00075   {
00076     SetErrorCode(MysqlDatabaseLayer::TranslateErrorCode(mysql_stmt_errno(m_pStatement)));
00077     SetErrorMessage(ConvertFromUnicodeStream(mysql_stmt_error(m_pStatement)));
00078     ThrowDatabaseException();
00079   }
00080   else
00081   {
00082     int nReturn = mysql_stmt_execute(m_pStatement);
00083     if (nReturn != 0)
00084     {
00085       SetErrorCode(MysqlDatabaseLayer::TranslateErrorCode(mysql_stmt_errno(m_pStatement)));
00086       SetErrorMessage(ConvertFromUnicodeStream(mysql_stmt_error(m_pStatement)));
00087       ThrowDatabaseException();
00088     }
00089   }
00090   delete []pBoundParameters;
00091 }
00092 
00093 DatabaseResultSet* MysqlPreparedStatementWrapper::RunQueryWithResults()
00094 {
00095   MysqlPreparedStatementResultSet* pResultSet = NULL;
00096   MYSQL_BIND* pBoundParameters = m_Parameters.GetMysqlParameterBindings();
00097 
00098   if (mysql_stmt_bind_param(m_pStatement, pBoundParameters))
00099   {
00100     SetErrorCode(MysqlDatabaseLayer::TranslateErrorCode(mysql_stmt_errno(m_pStatement)));
00101     SetErrorMessage(ConvertFromUnicodeStream(mysql_stmt_error(m_pStatement)));
00102     ThrowDatabaseException();
00103   }
00104   else
00105   {
00106     if (mysql_stmt_execute(m_pStatement) != 0)
00107     {
00108       SetErrorCode(MysqlDatabaseLayer::TranslateErrorCode(mysql_stmt_errno(m_pStatement)));
00109       SetErrorMessage(ConvertFromUnicodeStream(mysql_stmt_error(m_pStatement)));
00110       ThrowDatabaseException();
00111     }
00112     else
00113     {
00114       pResultSet = new MysqlPreparedStatementResultSet(m_pStatement);
00115       if (pResultSet)
00116         pResultSet->SetEncoding(GetEncoding());
00117     }
00118   }
00119   delete []pBoundParameters;
00120   
00121   return pResultSet;
00122 }
00123 

Generated on Sat May 13 17:31:34 2006 for databaselayer by  doxygen 1.4.1