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

📄 prsample.h

📁 oledb的例子
💻 H
字号:
//---------------------------------------------------------------------------
// Microsoft OLE DB Programmer's Reference Sample
// Copyright (C) 1998 By Microsoft? Corporation.
//
// @doc
//
// @module PRSAMPLE.H
//
//---------------------------------------------------------------------------
/////////////////////////////////////////////////////////////////
// Includes
//
/////////////////////////////////////////////////////////////////
#ifndef __PRSAMPLE_H__
#define __PRSAMPLE_H__
#include "oledb.h"         // OLE DB Header
#include "oledberr.h"      // OLE DB Errors
#include "msdasc.h"        // OLE DB Service Component header
#include "msdaguid.h"      // OLE DB Root Enumerator 
#include "msdasql.h"       // MSDASQL - Default provider
#include <stdio.h>         // input and output functions
#include <conio.h>         // getch, putch
#include <locale.h>        // setlocale
/////////////////////////////////////////////////////////////////
// Globals
//
/////////////////////////////////////////////////////////////////
extern DWORD g_dwFlags;
/////////////////////////////////////////////////////////////////
// Defines
//
/////////////////////////////////////////////////////////////////
#define __LONGSTRING(string) L##string
#define LONGSTRING(string) __LONGSTRING(string)
// Goes to CLEANUP on Failure_
#define CHECK_HR(hr)      \
if(FAILED(hr))         \
goto CLEANUP
// Goes to CLEANUP on Failure, and displays any ErrorInfo
#define XCHECK_HR(hr)                                               \
{                                                                   \
	if( g_dwFlags & DISPLAY_METHODCALLS )                            \
		fwprintf(stderr, LONGSTRING(#hr) L"\n");                      \
	if(FAILED(myHandleResult(hr, LONGSTRING(__FILE__), __LINE__)))   \
		goto CLEANUP;                                                 \
}
#define CHECK_MEMORY(hr, pv)   \
{                              \
	if(!pv)                     \
	{                           \
		hr = E_OUTOFMEMORY;      \
		CHECK_HR(hr);            \
	}                           \
}

#define MAX_COL_SIZE         5000
#define MAX_NAME_LEN         256
#define MAX_ROWS              10
#define MAX_DISPLAY_SIZE      20
#define MIN_DISPLAY_SIZE      3

// ROUNDUP on all platforms pointers must be aligned properly
#define ROUNDUP_AMOUNT            8
#define ROUNDUP_(size,amount)     (((ULONG)(size)+((amount)-1))&~((amount)-1))
#define ROUNDUP(size)             ROUNDUP_(size, ROUNDUP_AMOUNT)
enum
{
// Connecting
USE_PROMPTDATASOURCE      = 0x0001,
USE_ENUMERATOR            = 0x0002,
// Rowset
USE_COMMAND               = 0x0010,
// Storage objects
USE_ISEQSTREAM            = 0x0100,
// Display options
DISPLAY_METHODCALLS       = 0x1000,
DISPLAY_INSTRUCTIONS      = 0x2000,
};

/////////////////////////////////////////////////////////////////////////////
// Function prototypes
//
/////////////////////////////////////////////////////////////////////////////
// Main
BOOL   myParseCommandLine();
void   myDisplayInstructions();
BOOL   myGetInputFromUser(LPWSTR pwszInput, LPCWSTR pwszFmt, ...);
CHAR   myGetChar();
// Enumerator
HRESULT myCreateEnumerator(REFCLSID clsidEnumerator, CLSID* pCLSID);
// Data source
HRESULT myCreateDataSource(IUnknown** ppUnkDataSource);
HRESULT myDoInitialization(IUnknown* pIUnknown);
HRESULT myGetProperty(IUnknown* pIUnknown, REFIID riid, DBPROPID dwPropertyID, REFGUID guidPropertySet, BOOL* pbValue);
void myAddProperty(DBPROP* pProp, DBPROPID dwPropertyID, VARTYPE vtType = VT_BOOL, LONG lValue = VARIANT_TRUE, DBPROPOPTIONS dwOptions = DBPROPOPTIONS_OPTIONAL);
// Session
HRESULT myCreateSession(IUnknown* pUnkDataSource, IUnknown** ppUnkSession);
HRESULT myCreateSchemaRowset(GUID guidSchema, IUnknown* pUnkSession, ULONG cchBuffer, LPWSTR pwszBuffer);
// Command
HRESULT myCreateCommand(IUnknown* pUnkSession, IUnknown** ppUnkCommand);
HRESULT myExecuteCommand(IUnknown* pUnkCommand, WCHAR* pwszCommandText, ULONG cPropSets, DBPROPSET* rgPropSets, IUnknown** ppUnkRowset);
// Rowset
HRESULT myCreateRowset(IUnknown* pUnkSession, IUnknown** ppUnkRowset);
HRESULT mySetupBindings(IUnknown* pUnkRowset, ULONG* pcBindings, DBBINDING** prgBindings, ULONG* pcbRowSize);
HRESULT myCreateAccessor(IUnknown* pUnkRowset, HACCESSOR* phAccessor, ULONG* pcBindings, DBBINDING** prgBindings, ULONG* pcbRowSize);
HRESULT myDisplayRowset(IUnknown* pUnkRowset, LPCWSTR pwszColToReturn, ULONG cchBuffer, LPWSTR pwszBuffer);
HRESULT myDisplayColumnNames(IUnknown* pUnkRowset, ULONG* rgDispSize);
HRESULT myDisplayRow(ULONG iRow, ULONG cBindings, DBBINDING* rgBindings, void* pData, ULONG * rgDispSize);
HRESULT myInteractWithRowset(IRowset* pIRowset, LONG* pcRows, ULONG cRowsObtained, BOOL fCanFetchBackwards, void* pData, ULONG cbRowSize, DBBINDING* pBinding, ULONG cchBuffer, LPWSTR pwszBuffer);
HRESULT myFindColumn(IUnknown * pUnkRowset, LPCWSTR pwszName, LONG* plIndex);
HRESULT myUpdateDisplaySize(ULONG cBindings, DBBINDING* rgBindings, void* pData, ULONG* rgDispSize);
void myFreeBindings(ULONG cBindings, DBBINDING* rgBindings);
void myAddRowsetProperties(DBPROPSET* pPropSet, ULONG cProperties, DBPROP* rgProperties);
// Error
HRESULT myHandleResult(HRESULT hrReturned, LPCWSTR pwszFile, ULONG ulLine);
HRESULT myDisplayErrorRecord(HRESULT hrReturned, ULONG iRecord, IErrorRecords* pIErrorRecords, LPCWSTR pwszFile, ULONG ulLine);
HRESULT myDisplayErrorInfo(HRESULT hrReturned, IErrorInfo* pIErrorInfo, LPCWSTR pwszFile, ULONG ulLine);
HRESULT myGetSqlErrorInfo(ULONG iRecord, IErrorRecords* pIErrorRecords, BSTR* pBstr, LONG* plNativeError);
#endif// __PRSAMPLE_H__

⌨️ 快捷键说明

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