⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ado.cpp

📁 在开发MIS时,你是否常常为了取得某些汉字拼音而感到烦琐?本代码实现了输入一段代码,你就可以取得这些汉字的拼音,自带了二万多汉字的拼音库.
💻 CPP
📖 第 1 页 / 共 4 页
字号:
/*####################################################################
	Filename: 	ado.cpp
	----------------------------------------------------
	Remarks:	...
	----------------------------------------------------
	Author:		成真
	Email:		anyou@sina.com
				anyou@msn.com
	Created:	20/1/2003 19:19
  ####################################################################*/
#include "stdafx.h"
#include "resource.h"
#include "ADO.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

/*####################################################################
			------------------------------------------------
						CAdoConnection class
			------------------------------------------------
  ####################################################################*/

CAdoConnection::CAdoConnection()
{
	m_pConnection = NULL;
}

CAdoConnection::~CAdoConnection()
{
	Disconnect();
}

BOOL CAdoConnection::OleInit()
{
	return AfxOleInit();
}

/*===================================================================
	Name:		连接到数据源.
	-----------------------------------------------------
	Params:		strConnect: 连接字符串,包含连接信息.
				lOptions:	可选。决定该方法是在连接建立之后(异步)还是连接
						建立之前(同步)返回。可以是如下某个常量:
		常量					说明 
		adConnectUnspecified	(默认)同步方式打开连接。 
		adAsyncConnect			异步方式打开连接。Ado用 ConnectComplete 事
							件来通知何时完成连接。 
=====================================================================*/
BOOL CAdoConnection::Connect(LPCTSTR strConnect, long lOptions)
{
	m_strConnect = strConnect;
	try
	{
		///创建 Connection 对象---------------------------
		HRESULT	hr = m_pConnection.CreateInstance("ADODB.Connection");
		if (SUCCEEDED(hr))
		{
			// 连接数据库---------------------------------------------
			if (SUCCEEDED(m_pConnection->Open(strConnect, "", "", lOptions)))
			{	
				return TRUE;
			}
		}
	}
	catch (_com_error e)
	{
		TRACE(_T(":( 连接数据库发生错误: %s\n"), e.ErrorMessage());
		return FALSE;
	} 
	catch (...)
	{
		TRACE(_T(":( 连接数据库时发生未知错误:"));
	}
	return FALSE;
}

/*===================================================================
	Name:	关闭与数据源的连接.
	-----------------------------------------------------
	Remarks: 使用 Close 方法可关闭 Connection 对象以便释放所有关联的系统资
		源。关闭对象并非将它从内存中删除,可以更改它的属性设置并且在此后再
		次打开。要将对象从内存中完全删除,可将对象变量设置为 Nothing。
=====================================================================*/
BOOL CAdoConnection::Disconnect()
{
	try
	{
		if (m_pConnection != NULL && m_pConnection->State == adStateOpen) 
		{
			if (SUCCEEDED(m_pConnection->Close()))
			{
				return TRUE;
			}
		}
	}
	catch(_com_error e)
	{
		TRACE(_T(":( 关闭数据库发生错误: %s\n"), e.ErrorMessage());
		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(":( Cancel发生错误: %s\n"), e.ErrorMessage());
		return FALSE;
	} 
	return FALSE;
}

_ConnectionPtr CAdoConnection::GetConnection()
{
	return m_pConnection;
}

/*===================================================================
	Name:	取得最后发生的错误信息.
	-----------------------------------------------------
	Remarks: 任何涉及 ADO 对象的操作都可以产生一个或多个提供者错误。产生错
		误时,可以将一个或多个 Error 对象置于 Connection 对象的 Errors 集合
		中。其他 ADO 操作产生错误时,将清空 Errors 集合,并且将新的 Error 
		对象置于 Errors 集合中。 
			每个 Error 对象代表特定的提供者错误,而不是 ADO 错误。ADO 错误
		被记载在运行时的异常处理机制中。
			没有产生错误的 ADO 操作对 Errors 集合没有影响。使用 Clear 方式
		可手工清除 Errors 集合。
			Errors 集合中的 Error 对象集合描述响应单个语句时产生的所有错误。
		列举 Errors 集合中指定错误可使错误处理例程更精确地确定产生错误的原
		因及错误来源,并执行适当还原步骤。
			某些属性和方法将返回作为 Errors 集合中的 Error 对象显示的警告,
		但不会中止程序的执行。在调用 Recordset 对象上的 Resync、UpdateBatch
		或 CancelBatch 方法,Connection 的 Open 方法或者设置 Recordset 对象
		上的 Filter 属性前,请调用 Errors 集合上的 Clear 方法。这样您就可以
		阅读 Errors 集合的 Count 属性以测试返回的警告。
=====================================================================*/
CString CAdoConnection::GetLastError()
{
	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\n\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(":( GetLastError发生错误: %s\n"), e.ErrorMessage());
		return strErrors;
	} 
	return strErrors;
}

BOOL CAdoConnection::IsOpen()
{
	try
	{
		return (m_pConnection != NULL && m_pConnection->State == adStateOpen);
	}
	catch (_com_error e)
	{
		TRACE(_T(":( IsOpen方法发生错误: %s\n"), e.ErrorMessage());
		return FALSE;
	} 
	return FALSE;
}

BOOL CAdoConnection::SetConnectTimeOut(long lTime)
{
	try
	{
		return SUCCEEDED(m_pConnection->put_ConnectionTimeout(lTime));
	}
	catch (_com_error e)
	{
		TRACE(_T(":( SetConnectTimeOut方法发生错误: %s\n"), e.ErrorMessage());
		return FALSE;
	} 
	return FALSE;
}


/*========================================================================
    Name:		从数据源获取数据库信息.
	-----------------------------------------------------
	Params:		QueryType  所要运行的模式查询类型,可以为下列任意常量.
	adSchemaAsserts				CONSTRAINT_CATALOG
								CONSTRAINT_SCHEMA
								CONSTRAINT_NAME 
	adSchemaCatalogs			CATALOG_NAME 
	adSchemaCharacterSets		CHARACTER_SET_CATALOG
								CHARACTER_SET_SCHEMA
								CHARACTER_SET_NAME 
	adSchemaCheckConstraints	CONSTRAINT_CATALOG
								CONSTRAINT_SCHEMA
								CONSTRAINT_NAME 
	adSchemaCollations			 COLLATION_CATALOG
								COLLATION_SCHEMA
								COLLATION_NAME 
	adSchemaColumnDomainUsage	DOMAIN_CATALOG
								DOMAIN_SCHEMA
								DOMAIN_NAME
								COLUMN_NAME 
	adSchemaColumnPrivileges	TABLE_CATALOG
								TABLE_SCHEMA
								TABLE_NAME
								COLUMN_NAME
								GRANTOR
								GRANTEE 
	adSchemaColumns				TABLE_CATALOG
								TABLE_SCHEMA
								TABLE_NAME
								COLUMN_NAME 
	adSchemaConstraintColumnUsage TABLE_CATALOG
								TABLE_SCHEMA
								TABLE_NAME
								COLUMN_NAME 
	adSchemaConstraintTableUsage TABLE_CATALOG
								TABLE_SCHEMA
								TABLE_NAME 
	adSchemaForeignKeys			PK_TABLE_CATALOG
								PK_TABLE_SCHEMA
								PK_TABLE_NAME
								FK_TABLE_CATALOG
								FK_TABLE_SCHEMA
								FK_TABLE_NAME 
	adSchemaIndexes				TABLE_CATALOG
								TABLE_SCHEMA
								INDEX_NAME
								TYPE
								TABLE_NAME 
	adSchemaKeyColumnUsage		CONSTRAINT_CATALOG
								CONSTRAINT_SCHEMA
								CONSTRAINT_NAME
								TABLE_CATALOG
								TABLE_SCHEMA
								TABLE_NAME
								COLUMN_NAME 
	adSchemaPrimaryKeys			PK_TABLE_CATALOG
								PK_TABLE_SCHEMA
								PK_TABLE_NAME 
	adSchemaProcedureColumns	PROCEDURE_CATALOG
								PROCEDURE_SCHEMA
								PROCEDURE_NAME
								COLUMN_NAME 
	adSchemaProcedureParameters PROCEDURE_CATALOG
								PROCEDURE_SCHEMA
								PROCEDURE_NAME
								PARAMTER_NAME 
	adSchemaProcedures			PROCEDURE_CATALOG
								PROCEDURE_SCHEMA
								PROCEDURE_NAME
								PROCEDURE_TYPE 
	adSchemaProviderSpecific	 参见说明 
	adSchemaProviderTypes		DATA_TYPE
								BEST_MATCH 
	adSchemaReferentialConstraints CONSTRAINT_CATALOG
								CONSTRAINT_SCHEMA
								CONSTRAINT_NAME 
	adSchemaSchemata			CATALOG_NAME
								SCHEMA_NAME
								SCHEMA_OWNER 
	adSchemaSQLLanguages		<无> 
	adSchemaStatistics			TABLE_CATALOG
								TABLE_SCHEMA
								TABLE_NAME 
	adSchemaTableConstraints	CONSTRAINT_CATALOG
								CONSTRAINT_SCHEMA
								CONSTRAINT_NAME
								TABLE_CATALOG
								TABLE_SCHEMA
								TABLE_NAME
								CONSTRAINT_TYPE 
	adSchemaTablePrivileges		TABLE_CATALOG
								TABLE_SCHEMA
								TABLE_NAME
								GRANTOR
								GRANTEE 
	adSchemaTables				TABLE_CATALOG
								TABLE_SCHEMA
								TABLE_NAME
								TABLE_TYPE 
	adSchemaTranslations		TRANSLATION_CATALOG
								TRANSLATION_SCHEMA
								TRANSLATION_NAME 
	adSchemaUsagePrivileges		OBJECT_CATALOG
								OBJECT_SCHEMA
								OBJECT_NAME
								OBJECT_TYPE
								GRANTOR
								GRANTEE 
	adSchemaViewColumnUsage		VIEW_CATALOG
								VIEW_SCHEMA
								VIEW_NAME 
	adSchemaViewTableUsage		VIEW_CATALOG
								VIEW_SCHEMA
								VIEW_NAME 
	adSchemaViews				TABLE_CATALOG
								TABLE_SCHEMA
								TABLE_NAME 
	-----------------------------------------------------
	returns:	返回包含数据库信息的 Recordset 对象. Recordset 将以只读、静态
			游标打开.
	-----------------------------------------------------
	Remarks:	OpenSchema方法返回与数据源有关的信息,例如关于服务器上的表
			以及表中的列等信息, 上述数据仅供参考, 视具体的数据源可能会有不同。
==========================================================================*/
_RecordsetPtr CAdoConnection::OpenSchema(SchemaEnum QueryType)
{
	ASSERT(m_pConnection != NULL);
	try
	{
		return m_pConnection->OpenSchema(QueryType, vtMissing, vtMissing);
	}
	catch(_com_error e)
	{
		TRACE(_T(":( OpenSchema方法发生错误: %s\n"), e.ErrorMessage());
		return NULL;
	} 
	return NULL;
}

/*########################################################################

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -