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

📄 enum.cpp

📁 oledb的例子
💻 CPP
字号:
//---------------------------------------------------------------------------
// Microsoft OLE DB Programmer's Reference Sample
// Copyright (C) 1998 By Microsoft Corporation.
//
// @doc
//
// @module ENUM.CPP
//
//---------------------------------------------------------------------------
/////////////////////////////////////////////////////////////////
// Includes
//
/////////////////////////////////////////////////////////////////
#include "prsample.h"// Programmer's Reference Sample includes
/////////////////////////////////////////////////////////////////
// myCreateEnumerator
//
// This function creates an enumerator, obtains a sources rowset
// from it, displays the rowset to the user, and allows the user
// to specify the ProgID of a provider. The CLSID that matches
// this ProgID is retuned to the caller in *pCLSID.
//
/////////////////////////////////////////////////////////////////
HRESULT myCreateEnumerator(
														REFCLSID           clsidEnumerator,
														CLSID *            pCLSID
														)
{
	HRESULT            hr;
	IUnknown *         pIUnkEnumerator               = NULL;
	ISourcesRowset *   pISourcesRowset               = NULL;
	IRowset *          pIRowset                      = NULL;
	IDBInitialize *    pIDBInitialize                = NULL;
	WCHAR              wszProgID[MAX_NAME_LEN + 1]   = {0};
	const ULONG        cProperties                   = 2;
	DBPROP             rgProperties[cProperties];
	DBPROPSET          rgPropSets[1];
	// Create the enumerator object. We ask for IUnknown when creating
	// the enumerator because some enumerators may require initialization
	// before we can obtain a sources rowset from the enumerator. This is
	// indicated by whether the enumerator object exposes IDBInitialize
	// or not. (We don't want to ask for IDBInitialize, since enumerators
	// that don't require initialization will cause the CoCreateInstance
	// to fail.)
	XCHECK_HR(hr = CoCreateInstance(
									clsidEnumerator,                    // clsid -- enumerator
									NULL,                               // pUnkOuter
									CLSCTX_INPROC_SERVER,               // dwClsContext
									IID_IUnknown,                       // riid
									(void**)&pIUnkEnumerator            // ppvObj
									));

	// If the enumerator exposes IDBInitialize, we need to initialize it
	if( SUCCEEDED(hr = pIUnkEnumerator->QueryInterface(IID_IDBInitialize, (void**)&pIDBInitialize)) )
	{
		CHECK_HR(hr = myDoInitialization(pIUnkEnumerator));
	}
	// Set properties on the rowset, to request additional functionality
	myAddRowsetProperties(rgPropSets, cProperties, rgProperties);
	// Obtain a sources rowset from the enumerator. This rowset contains
	// all of the OLE DB providers that this enumerator is able to list.
	XCHECK_HR(hr = pIUnkEnumerator->QueryInterface(IID_ISourcesRowset,(void**)&pISourcesRowset));
	XCHECK_HR(hr = pISourcesRowset->GetSourcesRowset(
									NULL,                               // pUnkOuter
									IID_IRowset,                        // riid
									1,                                  // cPropSets
									rgPropSets,                         // rgPropSets
									(IUnknown**)&pIRowset               // ppRowset
									));
	// Display the rowset to the user. This will allow the user to
	// perform basic navigation of the rowset and will allow the user
	// to select a row containing a desired provider.
	CHECK_HR(hr = myDisplayRowset(pIRowset, L"SOURCES_NAME", MAX_NAME_LEN, wszProgID));
	// Obtain the ProgID for the provider to use from the user.
	// The default value for this is the value of the SOURCES_NAME
	// column in the row selected by the user previously.
	myGetInputFromUser(wszProgID, L"\nType the ProgID of a provider" L" to use [Enter = `%s`]: ", wszProgID);
	XCHECK_HR(hr = CLSIDFromProgID(wszProgID, pCLSID));
CLEANUP:
	if( pIUnkEnumerator )
		pIUnkEnumerator->Release();
	if( pISourcesRowset )
		pISourcesRowset->Release();
	if( pIRowset )
		pIRowset->Release();
	if( pIDBInitialize )
		pIDBInitialize->Release();
	return hr;
}

⌨️ 快捷键说明

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