📄 atldbsch.h
字号:
// This is a part of the Active Template Library.
// Copyright (C) 1996-1998 Microsoft Corporation
// All rights reserved.
//
// This source code is only intended as a supplement to the
// Active Template Library Reference and related
// electronic documentation provided with the library.
// See these sources for detailed information regarding the
// Active Template Library product.
///////////////////////////////////////////////////////////////////////////
// ATLDBSCH.H : Declarations for OLE DB Schema Rowset Consumer Support
//
#ifndef __ATLDBSCH_H__
#define __ATLDBSCH_H__
namespace ATL
{
template <ULONG nRestrictions>
class _CStoreRestrictions
{
public:
_CStoreRestrictions()
{
m_pvarRestrictions = NULL;
ATLTRY(m_pvarRestrictions = new CComVariant[nRestrictions]);
}
~_CStoreRestrictions()
{
delete [] m_pvarRestrictions;
}
HRESULT GetRowset(const CSession& session, const GUID& guidSchema, IRowset** ppRowset)
{
ATLASSERT(session.m_spOpenRowset != NULL);
CComPtr<IDBSchemaRowset> spSchemaRowset;
HRESULT hr;
hr = session.m_spOpenRowset->QueryInterface(IID_IDBSchemaRowset, (void**)&spSchemaRowset);
if (FAILED(hr))
return hr;
return spSchemaRowset->GetRowset(NULL, guidSchema, nRestrictions,
m_pvarRestrictions, IID_IRowset, 0, NULL, (IUnknown**)ppRowset);
}
CComVariant* m_pvarRestrictions;
};
template <>
class _CStoreRestrictions<0>
{
public:
HRESULT GetRowset(const CSession& session, const GUID& guidSchema, IRowset** ppRowset)
{
ATLASSERT(session.m_spOpenRowset != NULL);
CComPtr<IDBSchemaRowset> spSchemaRowset;
HRESULT hr;
hr = session.m_spOpenRowset->QueryInterface(IID_IDBSchemaRowset, (void**)&spSchemaRowset);
if (FAILED(hr))
return hr;
return spSchemaRowset->GetRowset(NULL, guidSchema, 0,
NULL, IID_IRowset, 0, NULL, (IUnknown**)ppRowset);
}
};
///////////////////////////////////////////////////////////////////////////
// class CSchemaRowset
template <class T, short nRestrictions>
class CSchemaRowset :
public CAccessorRowset<T, CRowset>,
public _CStoreRestrictions<nRestrictions>
{
public:
// Operations
HRESULT Open(const CSession& session, const GUID& guidSchema, bool bBind = true )
{
HRESULT hr;
hr = GetRowset(session, guidSchema, &m_spRowset);
if (SUCCEEDED(hr) && bBind)
hr = Bind();
return hr;
}
};
///////////////////////////////////////////////////////////////////////////
// class CRestrictions
template <class T, short nRestrictions, const GUID* pguid>
class CRestrictions : public CSchemaRowset<T, nRestrictions>
{
public:
HRESULT Open(const CSession& session, LPCTSTR lpszParam1 = NULL, LPCTSTR lpszParam2 = NULL,
LPCTSTR lpszParam3 = NULL, LPCTSTR lpszParam4 = NULL,
LPCTSTR lpszParam5 = NULL, LPCTSTR lpszParam6 = NULL,
LPCTSTR lpszParam7 = NULL, bool bBind = true )
{
USES_CONVERSION;
CComVariant* pVariant;
if (m_pvarRestrictions == NULL)
return E_OUTOFMEMORY;
if (lpszParam1 != NULL)
{
m_pvarRestrictions->vt = VT_BSTR;
m_pvarRestrictions->bstrVal = ::SysAllocString(T2COLE(lpszParam1));
}
if (lpszParam2 != NULL)
{
pVariant = m_pvarRestrictions + 1;
pVariant->vt = VT_BSTR;
pVariant->bstrVal = ::SysAllocString(T2COLE(lpszParam2));
}
if (lpszParam3 != NULL)
{
pVariant = m_pvarRestrictions + 2;
pVariant->vt = VT_BSTR;
pVariant->bstrVal = ::SysAllocString(T2COLE(lpszParam3));
}
if (lpszParam4 != NULL)
{
pVariant = m_pvarRestrictions + 3;
pVariant->vt = VT_BSTR;
pVariant->bstrVal = ::SysAllocString(T2COLE(lpszParam4));
}
if (lpszParam5 != NULL)
{
pVariant = m_pvarRestrictions + 4;
pVariant->vt = VT_BSTR;
pVariant->bstrVal = ::SysAllocString(T2COLE(lpszParam5));
}
if (lpszParam6 != NULL)
{
pVariant = m_pvarRestrictions + 5;
pVariant->vt = VT_BSTR;
pVariant->bstrVal = ::SysAllocString(T2COLE(lpszParam6));
}
if (lpszParam7 != NULL)
{
pVariant = m_pvarRestrictions + 6;
pVariant->vt = VT_BSTR;
pVariant->bstrVal = ::SysAllocString(T2COLE(lpszParam7));
}
return CSchemaRowset<T, nRestrictions>::Open(session, *pguid, bBind);
}
};
///////////////////////////////////////////////////////////////////////////
// CSchemas
class CSchemas
{
public:
CSchemas()
{
m_nSchemas = 0;
m_pSchemaGuids = NULL;
m_pulRestrictions = NULL;
};
~CSchemas()
{
// Clean up allocated memory
if (m_pSchemaGuids != NULL)
{
CoTaskMemFree(m_pSchemaGuids);
CoTaskMemFree(m_pulRestrictions);
}
};
// Operations
HRESULT GetSchemas(const CSession& session)
{
CComPtr<IDBSchemaRowset> spSchemaRowset;
HRESULT hr;
ATLASSERT(session.m_spOpenRowset != NULL);
hr = session.m_spOpenRowset->QueryInterface(IID_IDBSchemaRowset,
(void**)&spSchemaRowset);
if (FAILED(hr))
return hr;
return spSchemaRowset->GetSchemas(&m_nSchemas, &m_pSchemaGuids,
&m_pulRestrictions);
};
// Attributes
ULONG m_nSchemas;
LPGUID m_pSchemaGuids;
ULONG* m_pulRestrictions;
};
///////////////////////////////////////////////////////////////////////////
// CAssertionInfo
class CAssertionInfo
{
public:
CAssertionInfo()
{
memset(this, 0, sizeof(*this));
}
// Attributes
TCHAR m_szCatalog[129];
TCHAR m_szSchema[129];
TCHAR m_szName[129];
VARIANT_BOOL m_bIsDeferrable;
VARIANT_BOOL m_bInitiallyDeferred;
TCHAR m_szDescription[129];
// Binding Map
BEGIN_COLUMN_MAP(CAssertionInfo)
COLUMN_ENTRY(1, m_szCatalog)
COLUMN_ENTRY(2, m_szSchema)
COLUMN_ENTRY(3, m_szName)
COLUMN_ENTRY(4, m_bIsDeferrable)
COLUMN_ENTRY(5, m_bInitiallyDeferred)
COLUMN_ENTRY(6, m_szDescription)
END_COLUMN_MAP()
};
///////////////////////////////////////////////////////////////////////////
// class CCatalogInfo
class CCatalogInfo
{
public:
CCatalogInfo()
{
memset(this, 0, sizeof(*this));
}
// Attributes
TCHAR m_szName[129];
TCHAR m_szDescription[129];
// Binding Info
BEGIN_COLUMN_MAP(CCatalogInfo)
COLUMN_ENTRY(1, m_szName)
COLUMN_ENTRY(2, m_szDescription)
END_COLUMN_MAP()
};
///////////////////////////////////////////////////////////////////////////
// class CCharacterSetInfo
class CCharacterSetInfo
{
public:
CCharacterSetInfo()
{
memset(this, 0, sizeof(*this));
}
// Attributes
TCHAR m_szCatalog[129];
TCHAR m_szSchema[129];
TCHAR m_szName[129];
TCHAR m_szFormOfUse[129];
LARGE_INTEGER m_nNumCharacters;
TCHAR m_szCollateCatalog[129];
TCHAR m_szCollateSchema[129];
TCHAR m_szCollateName[129];
// Binding Info
BEGIN_COLUMN_MAP(CCharacterSetInfo)
COLUMN_ENTRY(1, m_szCatalog)
COLUMN_ENTRY(2, m_szSchema)
COLUMN_ENTRY(3, m_szName)
COLUMN_ENTRY(4, m_szFormOfUse)
COLUMN_ENTRY(5, m_nNumCharacters)
COLUMN_ENTRY(6, m_szCollateCatalog)
COLUMN_ENTRY(7, m_szCollateSchema)
COLUMN_ENTRY(8, m_szCollateName)
END_COLUMN_MAP()
};
///////////////////////////////////////////////////////////////////////////
// class CCheckConstraintInfo
class CCheckConstraintInfo
{
public:
CCheckConstraintInfo()
{
memset(this, 0, sizeof(*this));
}
// Attributes
TCHAR m_szCatalog[129];
TCHAR m_szSchema[129];
TCHAR m_szName[129];
TCHAR m_szCheckClause[129];
TCHAR m_szDescription[129];
// Binding Maps
BEGIN_COLUMN_MAP(CCheckConstraintInfo)
COLUMN_ENTRY(1, m_szCatalog)
COLUMN_ENTRY(2, m_szSchema)
COLUMN_ENTRY(3, m_szName)
COLUMN_ENTRY(4, m_szCheckClause)
COLUMN_ENTRY(5, m_szDescription)
END_COLUMN_MAP()
};
///////////////////////////////////////////////////////////////////////////
// class CCollationInfo
class CCollationInfo
{
public:
// Constructors
CCollationInfo()
{
memset(this, 0, sizeof(*this));
}
// Attributes
TCHAR m_szCatalog[129];
TCHAR m_szSchema[129];
TCHAR m_szName[129];
TCHAR m_szCharSetCatalog[129];
TCHAR m_szCharSetSchema[129];
TCHAR m_szCharSetName[129];
TCHAR m_szPadAttribute[10];
// Binding Maps
BEGIN_COLUMN_MAP(CCollationInfo)
COLUMN_ENTRY(1, m_szCatalog)
COLUMN_ENTRY(2, m_szSchema)
COLUMN_ENTRY(3, m_szName)
COLUMN_ENTRY(4, m_szCharSetCatalog)
COLUMN_ENTRY(5, m_szCharSetSchema)
COLUMN_ENTRY(6, m_szCharSetName)
COLUMN_ENTRY(7, m_szPadAttribute)
END_COLUMN_MAP()
};
///////////////////////////////////////////////////////////////////////////
// class CColumnDomainUsageInfo
class CColumnDomainUsageInfo
{
public:
// Constructor
CColumnDomainUsageInfo()
{
memset(this, 0, sizeof(*this));
}
// Attributes
TCHAR m_szCatalog[129];
TCHAR m_szSchema[129];
TCHAR m_szName[129];
TCHAR m_szTableCatalog[129];
TCHAR m_szTableSchema[129];
TCHAR m_szTableName[129];
TCHAR m_szColumnName[129];
GUID m_guidColumn;
ULONG m_nColumnPropID;
// Binding Maps
BEGIN_COLUMN_MAP(CColumnDomainUsageInfo)
COLUMN_ENTRY(1, m_szCatalog)
COLUMN_ENTRY(2, m_szSchema)
COLUMN_ENTRY(3, m_szName)
COLUMN_ENTRY(4, m_szTableCatalog)
COLUMN_ENTRY(5, m_szTableSchema)
COLUMN_ENTRY(6, m_szTableName)
COLUMN_ENTRY(7, m_szColumnName)
COLUMN_ENTRY(8, m_guidColumn)
COLUMN_ENTRY(9, m_nColumnPropID)
END_COLUMN_MAP()
};
///////////////////////////////////////////////////////////////////////////
// class CColumnPrivilegeInfo
class CColumnPrivilegeInfo
{
public:
// Constructor
CColumnPrivilegeInfo()
{
memset(this, 0, sizeof(*this));
}
// Attributes
TCHAR m_szGrantor[129];
TCHAR m_szGrantee[129];
TCHAR m_szTableCatalog[129];
TCHAR m_szTableSchema[129];
TCHAR m_szTableName[129];
TCHAR m_szColumnName[129];
GUID m_guidColumn;
ULONG m_nColumnPropID;
TCHAR m_szPrivilegeType[20];
VARIANT_BOOL m_bIsGrantable;
// Binding Maps
BEGIN_COLUMN_MAP(CColumnPrivilegeInfo)
COLUMN_ENTRY(1, m_szGrantor)
COLUMN_ENTRY(2, m_szGrantee)
COLUMN_ENTRY(3, m_szTableCatalog)
COLUMN_ENTRY(4, m_szTableSchema)
COLUMN_ENTRY(5, m_szTableName)
COLUMN_ENTRY(6, m_szColumnName)
COLUMN_ENTRY(7, m_guidColumn)
COLUMN_ENTRY(8, m_nColumnPropID)
COLUMN_ENTRY(9, m_szPrivilegeType)
COLUMN_ENTRY(10, m_bIsGrantable)
END_COLUMN_MAP()
};
///////////////////////////////////////////////////////////////////////////
// class CColumnsInfo
class CColumnsInfo
{
public:
// Constructors and Destructors
CColumnsInfo()
{
memset(this, 0, sizeof(*this));
}
// Operations
TCHAR m_szTableCatalog[129];
TCHAR m_szTableSchema[129];
TCHAR m_szTableName[129];
TCHAR m_szColumnName[129];
GUID m_guidColumn;
ULONG m_nColumnPropID;
ULONG m_nOrdinalPosition;
VARIANT_BOOL m_bColumnHasDefault;
TCHAR m_szColumnDefault[129];
ULONG m_nColumnFlags;
VARIANT_BOOL m_bIsNullable;
USHORT m_nDataType;
GUID m_guidType;
ULONG m_nMaxLength;
ULONG m_nOctetLength;
USHORT m_nNumericPrecision;
SHORT m_nNumericScale;
ULONG m_nDateTimePrecision;
TCHAR m_szCharSetCatalog[129];
TCHAR m_szCharSetSchema[129];
TCHAR m_szCharSetName[129];
TCHAR m_szCollationCatalog[129];
TCHAR m_szCollationSchema[129];
TCHAR m_szCollationName[129];
TCHAR m_szDomainCatalog[129];
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -