![]() |
Database »
Database »
ADO
Intermediate
Another Simple ADO ClassBy Christopher W. BackenAnother simple yet cool ADO class for your project - from zCoders.com! |
SQL, VC6Win2K, SQL Server, Visual Studio, DBA, Dev
|
|
Advanced Search Add to IE Search |
|
|
|
||||||||||||||||

Here is another ADO class for any database projects you may have coming up. The class is provided from the link above. The class is zipped up with the ado type library. I created this class because I couldn't find any good ado classes with disconnected recordsets in them. I hope this class helps you out. Here are the main methods:
CRADatabase()
~CRADatabase()
RAConnect(char *ConnectionString)
RAGetDisconnectedRs(char *SqlStatement)
RAExecuteNoRs(char *SqlStatement)
RAExecuteRs(char *SqlStatement)
Usage:
_RecordsetPtr oRs; CRADatabase rad; for (int count=0; count<1000; count++) { if (S_OK == rad.RAConnect("DSN=Database;UID=sa;PWD=")) { oRs = rad.RAGetDisconnectedRs("SELECT TOP 100 * FROM orders"); CComVariant val; if (oRs) { while (!oRs->adoEOF) { val = oRs->Fields->Item[_variant_t("order_number")]->Value; if (val.vt != (VT_NULL)) { printf("%s\n",(char*)_bstr_t(val)); } oRs->MoveNext(); } oRs->Release(); oRs->Close(); } } }
Here is the code (Click on link above to get zipped class!):
// RADatabase.cpp: implementation of the CRADatabase class. // ////////////////////////////////////////////////////////////////////// #include "stdafx.h" #include "RADatabase.h" ////////////////////////////////////////////////////////////////////// // Construction/Destruction ////////////////////////////////////////////////////////////////////// CRADatabase::CRADatabase() { try { // Initialize COM CoInitialize(NULL); // Initialize ADO m_Command.CreateInstance(__uuidof(Command)); m_Recordset.CreateInstance(__uuidof(Recordset)); m_Connection.CreateInstance(__uuidof(Connection)); } catch(_com_error &e) { printf("Description = %s\n", (char*) e.Description()); } catch(...) { } } CRADatabase::~CRADatabase() { // Clean up ADO objects try { if (m_Connection) { if(m_Connection->State == adStateOpen) { m_Connection->Close(); m_Connection.Release(); } } if (m_Recordset) { if(m_Recordset->State == adStateOpen) { m_Recordset->Close(); m_Recordset.Release(); } } m_Connection = NULL; m_Command = NULL; m_Recordset = NULL; CoUninitialize(); } catch(_com_error &e) { printf("Description = %s\n", (char*) e.Description()); } catch(...) { } } HRESULT CRADatabase::RAConnect(const char *ConnectionString) { // Attemp a connect, reconnect, or leave if already connected if (strlen(ConnectionString) > 0) { try { if (m_Connection == NULL) m_Connection.CreateInstance(__uuidof(Connection)); if (0 == _stricmp(ConnectionString, m_ConnectionString) && m_Connection->State == adStateOpen) return S_OK; else { if (m_Connection->State == adStateOpen) m_Connection->Close(); sprintf(m_ConnectionString, ConnectionString); } // Perform the connect if (S_OK == m_Connection->Open((char*)m_ConnectionString, L"", L"", adModeUnknown)) return S_OK; } catch(_com_error &e) { printf("Description = %s\n", (char*) e.Description()); } catch(...) { } } return E_FAIL; } _RecordsetPtr CRADatabase::RAGetDisconnectedRs(const char *SqlStatement) { // Attempt get a disconnected RS and terminate the connection to the DB if (strlen(SqlStatement) > 0) { try { if (m_Connection == NULL || m_Connection->State == adStateClosed) RAConnect(m_ConnectionString); if (m_Recordset) { if (m_Recordset->State == adStateOpen) m_Recordset->Close(); } else { m_Recordset.CreateInstance(__uuidof(Recordset)); } m_Recordset->CursorLocation = adUseClient; m_Recordset->Open(SqlStatement, m_Connection.GetInterfacePtr(), adOpenForwardOnly, adLockBatchOptimistic, -1); m_Recordset->PutRefActiveConnection(NULL); if(m_Connection->GetState() == adStateOpen) m_Connection->Close(); //m_Connection.Release(); //m_Connection = NULL; return m_Recordset.Detach(); } catch(_com_error &e) { printf("Description = %s\n", (char*) e.Description()); } catch(...) { } } return NULL; } HRESULT CRADatabase::RAExecuteNoRs(const char *SqlStatement) { // Attempt to execute a SQL statement and leave connection open if (strlen(SqlStatement) > 0) { try { if (m_Connection == NULL || m_Connection->State == adStateClosed) RAConnect(m_ConnectionString); m_Connection->Execute(SqlStatement, NULL, adExecuteNoRecords ); return S_OK; } catch(_com_error &e) { printf("Description = %s\n", (char*) e.Description()); } catch(...) { } } return E_FAIL; } _RecordsetPtr CRADatabase::RAExecuteRs(const char *SqlStatement) { // Attempt to execute a SQL statement, return the RS, and leave connection open if (strlen(SqlStatement) > 0) { try { if (m_Connection == NULL || m_Connection->State == adStateClosed) RAConnect(m_ConnectionString); if (m_Recordset) { if (m_Recordset->State == adStateOpen) m_Recordset->Close(); } else { m_Recordset.CreateInstance(__uuidof(Recordset)); } m_Command->ActiveConnection = m_Connection; m_Command->CommandType = adCmdText; m_Command->CommandText = SqlStatement; _variant_t vNull; vNull.vt = VT_ERROR; vNull.scode = DISP_E_PARAMNOTFOUND; m_Recordset = m_Command->Execute( &vNull, &vNull, adCmdText ); return m_Recordset.Detach(); } catch(_com_error &e) { printf("Description = %s\n", (char*) e.Description()); } catch(...) { } } return NULL; }
| You must Sign In to use this message board. | ||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||
General
News
Question
Answer
Joke
Rant
Admin
|
PermaLink |
Privacy |
Terms of Use
Last Updated: 13 Mar 2001 Editor: Chris Maunder |
Copyright 2001 by Christopher W. Backen Everything else Copyright © CodeProject, 1999-2009 Web10 | Advertise on the Code Project |