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

📄 mapiprovidersess.h

📁 vc++6.0数据库编程大全一书得各个章节得源码,比较详细.可以仔细参照学习!
💻 H
字号:
// Session.h : Declaration of the CMAPIProviderSession
#ifndef __CMAPIProviderSession_H_
#define __CMAPIProviderSession_H_
#include "resource.h"       // main symbols
#include "MAPIProviderRS.h"
class CMAPIProviderSessionTRSchemaRowset;
class CMAPIProviderSessionColSchemaRowset;
class CMAPIProviderSessionPTSchemaRowset;
/////////////////////////////////////////////////////////////////////////////
// CMAPIProviderSession
class ATL_NO_VTABLE CMAPIProviderSession : 
	public CComObjectRootEx<CComSingleThreadModel>,
	public IGetDataSourceImpl<CMAPIProviderSession>,
	public IOpenRowsetImpl<CMAPIProviderSession>,
	public ISessionPropertiesImpl<CMAPIProviderSession>,
	public IObjectWithSiteSessionImpl<CMAPIProviderSession>,
	public IDBSchemaRowsetImpl<CMAPIProviderSession>,
	public IDBCreateCommandImpl<CMAPIProviderSession, CMAPIProviderCommand>
{
public:
	CMAPIProviderSession()
	{
	}
	HRESULT FinalConstruct()
	{
		return FInit();
	}
	STDMETHOD(OpenRowset)(IUnknown *pUnk, DBID *pTID, DBID *pInID, REFIID riid,
					   ULONG cSets, DBPROPSET rgSets[], IUnknown **ppRowset)
	{
		CMAPIProviderRowset* pRowset;
		return CreateRowset(pUnk, pTID, pInID, riid, cSets, rgSets, ppRowset, pRowset);
	}
BEGIN_PROPSET_MAP(CMAPIProviderSession)
	BEGIN_PROPERTY_SET(DBPROPSET_SESSION)
		PROPERTY_INFO_ENTRY(SESS_AUTOCOMMITISOLEVELS)
	END_PROPERTY_SET(DBPROPSET_SESSION)
END_PROPSET_MAP()
BEGIN_COM_MAP(CMAPIProviderSession)
	COM_INTERFACE_ENTRY(IGetDataSource)
	COM_INTERFACE_ENTRY(IOpenRowset)
	COM_INTERFACE_ENTRY(ISessionProperties)
	COM_INTERFACE_ENTRY(IObjectWithSite)
	COM_INTERFACE_ENTRY(IDBCreateCommand)
	COM_INTERFACE_ENTRY(IDBSchemaRowset)
END_COM_MAP()
BEGIN_SCHEMA_MAP(CMAPIProviderSession)
	SCHEMA_ENTRY(DBSCHEMA_TABLES, CMAPIProviderSessionTRSchemaRowset)
	SCHEMA_ENTRY(DBSCHEMA_COLUMNS, CMAPIProviderSessionColSchemaRowset)
	SCHEMA_ENTRY(DBSCHEMA_PROVIDER_TYPES, CMAPIProviderSessionPTSchemaRowset)
END_SCHEMA_MAP()
};
class CMAPIProviderSessionTRSchemaRowset : 
	public CRowsetImpl< CMAPIProviderSessionTRSchemaRowset, CTABLESRow, CMAPIProviderSession>
{
public:
	HRESULT Execute(LONG* pcRowsAffected, ULONG, const VARIANT*)
	{
		USES_CONVERSION;
		CTABLESRow trData;
		lstrcpyW(trData.m_szType, OLESTR("TABLE"));
		lstrcpyW(trData.m_szDesc, OLESTR("The Mail Table"));
		lstrcpynW(trData.m_szTable, 
			T2OLE("Mail"), 
			SIZEOF_MEMBER(CTABLESRow, m_szTable));
		if (!m_rgRowData.Add(trData))
			return E_OUTOFMEMORY;
		*pcRowsAffected = 1;
		return S_OK;
	}
};
class CMAPIProviderSessionColSchemaRowset : 
	public CRowsetImpl< CMAPIProviderSessionColSchemaRowset, CCOLUMNSRow, CMAPIProviderSession>
{
public:
	HRESULT Execute(LONG* pcRowsAffected, ULONG, const VARIANT*)
	{
		const int NUMBERCOLUMNS = 4;
		USES_CONVERSION;
		CCOLUMNSRow crColumnInfo[NUMBERCOLUMNS];
		//******
 
		// Initialize crColumnInfo to null
		memset(crColumnInfo, 0, sizeof(CCOLUMNSRow)*NUMBERCOLUMNS);
		// Fill out common fields between columns
		for (int column=0; column<NUMBERCOLUMNS; column++) {
			lstrcpyW(crColumnInfo[column].m_szTableName, 
				T2OLE("Mail"));
				crColumnInfo[column].m_ulOrdinalPosition = column+1;
				crColumnInfo[column].m_bIsNullable = VARIANT_FALSE;
				crColumnInfo[column].m_bColumnHasDefault = VARIANT_FALSE;
				crColumnInfo[column].m_ulColumnFlags = 0;
				crColumnInfo[column].m_nDataType = DBTYPE_STR;
			// Declare new schema row
				m_rgRowData.Add(crColumnInfo[column]);
		}
	// column names
		lstrcpyW(crColumnInfo[0].m_szColumnName, OLESTR("Author"));
		lstrcpyW(crColumnInfo[1].m_szColumnName, OLESTR("Subject"));
		lstrcpyW(crColumnInfo[2].m_szColumnName, OLESTR("Date"));
		lstrcpyW(crColumnInfo[3].m_szColumnName, OLESTR("Body"));
	// column descriptions
		lstrcpyW(crColumnInfo[0].m_szDescription, OLESTR("Class"));
		lstrcpyW(crColumnInfo[1].m_szDescription, OLESTR("Subject"));
		lstrcpyW(crColumnInfo[2].m_szDescription, OLESTR("Date"));
		lstrcpyW(crColumnInfo[3].m_szDescription, OLESTR("Body"));
	// column sizes
		crColumnInfo[0].m_ulCharMaxLength = 50;
		crColumnInfo[1].m_ulCharMaxLength = 256;
		crColumnInfo[2].m_ulCharMaxLength = 20;
		crColumnInfo[3].m_ulCharMaxLength = 1024;
		*pcRowsAffected = NUMBERCOLUMNS;  // for the four columns
		//******
		return S_OK;
	}
};
class CMAPIProviderSessionPTSchemaRowset : 
	public CRowsetImpl< CMAPIProviderSessionPTSchemaRowset, CPROVIDER_TYPERow, CMAPIProviderSession>
{
public:
	HRESULT Execute(LONG* pcRowsAffected, ULONG, const VARIANT*)
	{
		return S_OK;
	}
};
#endif //__CMAPIProviderSession_H_

⌨️ 快捷键说明

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