?? ado.cpp
字號:
}
/*========================================================================
Name: 關閉與數據源的連接.
-----------------------------------------------------
Remarks: 使用 Close 方法可關閉 Connection 對象以便釋放所有關聯的系統資源.
==========================================================================*/
void CAdoConnection::Close()
{
try
{
if (m_pConnection != NULL && IsOpen())
{
m_pConnection->Close();
}
}
catch (_com_error e)
{
TRACE(_T("Warning: 關閉數據庫發生異常. 錯誤信息: %s; 文件: %s; 行: %d\n"), e.ErrorMessage(), __FILE__, __LINE__);
}
}
/*========================================================================
Name: 關閉連接并釋放對象.
-----------------------------------------------------
Remarks: 關閉連接并釋放connection對象.
==========================================================================*/
void CAdoConnection::Release()
{
if (IsOpen()) Close();
m_pConnection.Release();
}
/*========================================================================
Name: 執行指定的查詢、SQL 語句、存儲過程等.
----------------------------------------------------------
Remarks: 請參考 CAdoRecordSet 類的Open方法. 返回的 Recordset 對象始
終為只讀、僅向前的游標.
==========================================================================*/
_RecordsetPtr CAdoConnection::Execute(LPCTSTR lpszSQL, long lOptions)
{
ASSERT(m_pConnection != NULL);
ASSERT(AfxIsValidString(lpszSQL));
try
{
return m_pConnection->Execute(_bstr_t(lpszSQL), NULL, lOptions);
}
catch (_com_error e)
{
TRACE(_T("Warning: Execute 方法發生異常. 錯誤信息: %s; 文件: %s; 行: %d\n"), e.ErrorMessage(), __FILE__, __LINE__);
return FALSE;
}
return FALSE;
}
/*========================================================================
Remarks: 請參考 CAdoRecordSet 類 Cancel 方法.
==========================================================================*/
BOOL CAdoConnection::Cancel()
{
ASSERT(m_pConnection != NULL);
try
{
return m_pConnection->Cancel();
}
catch (_com_error e)
{
TRACE(_T("Warning: Cancel 方法發生異常. 錯誤信息: %s; 文件: %s; 行: %d\n"), e.ErrorMessage(), __FILE__, __LINE__);
return FALSE;
}
return FALSE;
}
/*========================================================================
Name: 取得最后發生的錯誤信息.
==========================================================================*/
CString CAdoConnection::GetLastErrorText()
{
ASSERT(m_pConnection != NULL);
CString strErrors = "";
try
{
if (m_pConnection != NULL)
{
ErrorsPtr pErrors = m_pConnection->Errors;
CString strError;
for (long n = 0; n < pErrors->Count; n++)
{
ErrorPtr pError = pErrors->GetItem(n);
strError.Format(_T("Description: %s\r\nState: %s, Native: %d, Source: %s\r\n"),
(LPCTSTR)pError->Description,
(LPCTSTR)pError->SQLState,
pError->NativeError,
(LPCTSTR)pError->Source);
strErrors += strError;
}
}
return strErrors;
}
catch (_com_error e)
{
TRACE(_T("Warning: GetLastError 方法發生異常. 錯誤信息: %s; 文件: %s; 行: %d\n"), e.ErrorMessage(), __FILE__, __LINE__);
return strErrors;
}
return strErrors;
}
ErrorsPtr CAdoConnection::GetErrors()
{
ASSERT(m_pConnection != NULL);
try
{
if (m_pConnection != NULL)
{
return m_pConnection->Errors;
}
return NULL;
}
catch (_com_error e)
{
TRACE(_T("Warning: GetErrors 方法發生異常. 錯誤信息: %s; 文件: %s; 行: %d\n"), e.ErrorMessage(), __FILE__, __LINE__);
return NULL;
}
return NULL;
}
ErrorPtr CAdoConnection::GetError(long index)
{
ASSERT(m_pConnection != NULL);
try
{
if (m_pConnection != NULL)
{
ErrorsPtr pErrors = m_pConnection->Errors;
if (index >= 0 && index < pErrors->Count)
{
return pErrors->GetItem(_variant_t(index));
}
}
return NULL;
}
catch (_com_error e)
{
TRACE(_T("Warning: GetError 方法發生異常. 錯誤信息: %s; 文件: %s; 行: %d\n"), e.ErrorMessage(), __FILE__, __LINE__);
return NULL;
}
return NULL;
}
/*========================================================================
Name: 取得連接時間.
==========================================================================*/
long CAdoConnection::GetConnectTimeOut()
{
ASSERT(m_pConnection != NULL);
try
{
return m_pConnection->GetConnectionTimeout();
}
catch (_com_error e)
{
TRACE(_T("Warning: GetConnectTimeOut 方法發生異常. 錯誤信息: %s; 文件: %s; 行: %d\n"), e.ErrorMessage(), __FILE__, __LINE__);
return -1;
}
return -1;
}
/*========================================================================
Name: 設置連接時間.
==========================================================================*/
BOOL CAdoConnection::SetConnectTimeOut(long lTime)
{
ASSERT(m_pConnection != NULL);
try
{
m_pConnection->PutConnectionTimeout(lTime);
return TRUE;
}
catch (_com_error e)
{
TRACE(_T("Warning: SetConnectTimeOut 方法發生異常. 錯誤信息: %s; 文件: %s; 行: %d\n"), e.ErrorMessage(), __FILE__, __LINE__);
return FALSE;
}
}
/*========================================================================
Name: 取得默認數據庫的名稱.
==========================================================================*/
CString CAdoConnection::GetDefaultDatabase()
{
ASSERT(m_pConnection != NULL);
try
{
return CString(LPCTSTR(_bstr_t(m_pConnection->GetDefaultDatabase())));
}
catch (_com_error e)
{
TRACE(_T("Warning: GetDefaultDatabase 方法發生異常. 錯誤信息: %s; 文件: %s; 行: %d\n"), e.ErrorMessage(), __FILE__, __LINE__);
return CString(_T(""));
}
}
/*========================================================================
Name: 取得 Connection 對象提供者的名稱.
==========================================================================*/
CString CAdoConnection::GetProviderName()
{
ASSERT(m_pConnection != NULL);
try
{
return CString(LPCTSTR(_bstr_t(m_pConnection->GetProvider())));
}
catch (_com_error e)
{
TRACE(_T("Warning: GetProviderName 方法發生異常. 錯誤信息: %s; 文件: %s; 行: %d\n"), e.ErrorMessage(), __FILE__, __LINE__);
return CString(_T(""));
}
}
/*========================================================================
Name: 取得 ADO 的版本號
==========================================================================*/
CString CAdoConnection::GetVersion()
{
ASSERT(m_pConnection != NULL);
try
{
return CString(LPCTSTR(_bstr_t(m_pConnection->GetVersion())));
}
catch (_com_error e)
{
TRACE(_T("Warning: GetVersion 方法發生異常. 錯誤信息: %s; 文件: %s; 行: %d\n"), e.ErrorMessage(), __FILE__, __LINE__);
return CString(_T(""));
}
}
/*========================================================================
Name: 取得對象的狀態(同 Recordset 對象的 GetState 方法).
-----------------------------------------------------
returns: 返回下列常量之一的長整型值.
[常量] [說明]
----------------------------------
adStateClosed 指示對象是關閉的.
adStateOpen 指示對象是打開的.
-----------------------------------------------------
Remarks: 可以隨時使用 State 屬性取得指定對象的當前狀態.
==========================================================================*/
long CAdoConnection::GetState()
{
ASSERT(m_pConnection != NULL);
try
{
return m_pConnection->GetState();
}
catch (_com_error e)
{
TRACE(_T("Warning: GetState 發生異常. 錯誤信息: %s; 文件: %s; 行: %d\n"), e.ErrorMessage(), __FILE__, __LINE__);
return -1;
}
return -1;
}
/*========================================================================
Name: 檢測連接對象是否為打開狀態.
==========================================================================*/
BOOL CAdoConnection::IsOpen()
{
try
{
return (m_pConnection != NULL && (m_pConnection->State & adStateOpen));
}
catch (_com_error e)
{
TRACE(_T("Warning: IsOpen 方法發生異常. 錯誤信息: %s; 文件: %s; 行: %d\n"), e.ErrorMessage(), __FILE__, __LINE__);
return FALSE;
}
return FALSE;
}
/*========================================================================
Name: 取得在 Connection 對象中修改數據的可用權限.
----------------------------------------------------------
returns: 返回以下某個 ConnectModeEnum 的值.
[常量] [說明]
----------------------------------
adModeUnknown 默認值. 表明權限尚未設置或無法確定.
adModeRead 表明權限為只讀.
adModeWrite 表明權限為只寫.
adModeReadWrite 表明權限為讀/寫.
adModeShareDenyRead 防止其他用戶使用讀權限打開連接.
adModeShareDenyWrite 防止其他用戶使用寫權限打開連接.
adModeShareExclusive 防止其他用戶打開連接.
adModeShareDenyNone 防止其他用戶使用任何權限打開連接.
----------------------------------------------------------
Remarks: 使用 Mode 屬性可設置或返回當前連接上提供者正在使用的訪問權限.
==========================================================================*/
ConnectModeEnum CAdoConnection::GetMode()
{
ASSERT(m_pConnection != NULL);
try
{
return m_pConnection->GetMode();
}
catch (_com_error e)
{
TRACE(_T("Warning: GetMode 發生異常. 錯誤信息: %s; 文件: %s; 行: %d\n"), e.ErrorMessage(), __FILE__, __LINE__);
return adModeUnknown;
}
return adModeUnknown;
}
/*========================================================================
Name: 設置在 Connection 中修改數據的可用權限. 請參考 GetMode 方法.
----------------------------------------------------------
Remarks: 只能在關閉 Connection 對象時方可設置 Mode 屬性.
==========================================================================*/
BOOL CAdoConnection::SetMode(ConnectModeEnum mode)
{
ASSERT(m_pConnection != NULL);
ASSERT(!IsOpen());
try
{
m_pConnection->PutMode(mode);
}
catch (_com_error e)
{
TRACE(_T("Warning: SetMode 發生異常. 錯誤信息: %s; 文件: %s; 行: %d\n"), e.ErrorMessage(), __FILE__, __LINE__);
return FALSE;
}
return TRUE;
}
/*========================================================================
Name: 從數據源獲取數據庫信息.
-----------------------------------------------------
Params: QueryType 所要運行的模式查詢類型.
-----------------------------------------------------
returns: 返回包含數據庫信息的 Recordset 對象. Recordset 將以只讀、靜態
游標打開.
==========================================================================*/
_RecordsetPtr CAdoConnection::OpenSchema(SchemaEnum QueryType)
{
ASSERT(m_pConnection != NULL);
try
{
return m_pConnection->OpenSchema(QueryType, vtMissing, vtMissing);
}
catch(_com_error e)
{
TRACE(_T("Warning: OpenSchema方法發生異常. 錯誤信息: %s; 文件: %s; 行: %d\n"), e.ErrorMessage(), __FILE__, __LINE__);
return NULL;
}
return NULL;
}
/*########################################################################
------------------------------------------------
事務處理
------------------------------------------------
########################################################################*/
/*========================================================================
Name: 開始新事務.
-----------------------------------------------------
returns: 對于支持嵌套事務的數據庫來說, 在已打開的事務中調用 BeginTrans
方法將開始新的嵌套事務. 返回值將指示嵌套層次: 返回值為 1 表示已打開頂層
事務 (即事務不被另一個事務所嵌套), 返回值為 2 表示已打開第二層事務(嵌套
在頂層事務中的事務), 依次類推.
-----------------------------------------------------
Remarks: 一旦調用了 BeginTrans 方法, 在調用 CommitTrans 或 RollbackTrans
結束事務之前, 數據庫將不再立即提交所作的任何更改.
==========================================================================*/
long CAdoConnection::BeginTrans()
{
ASSERT(m_pConnection != NULL);
try
{
return m_pConnection->BeginTrans();
}
catch (_com_error e)
{
TRACE(_T("Warning: BeginTrans 方法發生異常. 錯誤信息: %s; 文件: %s; 行: %d\n"), e.ErrorMessage(), __FILE__, __LINE__);
return -1;
}
return -1;
}
/*========================================================================
Name: 保存任何更改并結束當前事務.
-----------------------------------------------------
Remarks: 調用 CommitTrans 或 RollbackTrans 只影響最新打開的事務; 在
處理任何更高層事務之前必須關閉或回卷當前事務.
==========================================================================*/
BOOL CAdoConnection::CommitTrans()
{
ASSERT(m_pConnection != NULL);
try
{
return SUCCEEDED(m_pConnection->CommitTrans());
}
catch (_com_error e)
{
TRACE(_T("Warning: CommitTrans 方法發生異常. 錯誤信息: %s; 文件: %s; 行: %d\n"), e.ErrorMessage(), __FILE__, __LINE__);
return FALSE;
}
return FALSE;
}
/*========================================================================
Name: 取消當前事務中所作的任何更改并結束事務.
==========================================================================*/
BOOL CAdoConnection::RollbackTrans()
{
ASSERT(m_pConnection != NULL);
try
{
return SUCCEEDED(m_pConnection->RollbackTrans());
}
catch (_com_error e)
{
TRACE(_T("Warning: RollbackTrans 方法發生異常. 錯誤信息: %s; 文件: %s; 行: %d\n"), e.ErrorMessage(), __FILE__, __LINE__);
return FALSE;
}
return FALSE;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -