Hello, OLE DB(C++) World!

Posted on 3月 27th, 2012 by cx20

OLE DB(C++)

OLE DB(Object Linking and Embedding Database)は、マイクロソフトが提唱した COM(Component Object Model)ベースの API 仕様である。
OLE DB の概念は「OLE DB プロバイダ」(データ提供者)と「OLE DB コンシューマ」(データ消費者)からなる。(サーバーやクライアントという用語を使わないのは、n 層の場合に、必ずしもその意味にならない為。)
データソースの差異は OLE DB プロバイダによって吸収される為、OLE DB コンシューマの手順にしたがってプログラムを作成すれば、基本的な差異を意識せず、プログラムすることができる。
OLE DB プロバイダとしては、以下のようなプロバイダがある。

プロバイダ名 表示名 説明
MSDASQL Microsoft OLE DB Provider for ODBC ODBC データベース
Microsoft.Jet.OLEDB.4.0 Microsoft OLE DB Provider for Microsoft Jet Microsoft Jet データベース
Microsoft.ACE.OLEDB.12.0 Microsoft Office 12.0 Access Database Engine OLE DB Provider Microsoft Access データベース
SQLOLEDB Microsoft OLE DB Provider for SQL Server Microsoft SQL Server
SQLNCLI10 SQL Server Native Client 10.0 Microsoft SQL Server
MSDAORA Microsoft OLE DB Provider for Oracle Oracle データベース

ソースコード(VC + OLE DB + Jet データベース)

#include <atldbcli.h>
 
int _tmain( int argc, TCHAR* argv[] )
{
    CoInitialize(NULL);
    USES_CONVERSION;
 
    CDataSource ds;
    CSession ses;
    CCommand<CDynamicAccessor> rs;
 
    WCHAR szCon[] = L"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=hello.mdb";
    WCHAR szSQL[] = L"SELECT 'Hello, OLE DB World!' AS Message";
 
    ds.OpenFromInitializationString( szCon );
    ses.Open( ds );
    rs.Open( ses, szSQL );
    while( rs.MoveNext() == S_OK )
    {
        _tprintf( _T("%sn"), OLE2T( rs.GetColumnName(1) ) );
        _tprintf( _T("--------------------n") );
        _tprintf( _T("%sn"), (LPCTSTR)rs.GetValue(1) );
    }
    ses.Close();
    ds.Close();
 
    CoInitialize(NULL);
 
    return 0;
}

ソースコード(VC + OLE DB + ACE データベース)

#include <atldbcli.h>
 
int _tmain( int argc, TCHAR* argv[] )
{
    CoInitialize(NULL);
    USES_CONVERSION;
 
    CDataSource ds;
    CSession ses;
    CCommand<CDynamicStringAccessor> cmd;
 
    WCHAR szCon[] = L"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=hello.accdb";
    WCHAR szSQL[] = L"SELECT 'Hello, OLE DB World!' AS Message";
 
    ds.OpenFromInitializationString( szCon );
    ses.Open( ds );
    cmd.Open( ses, szSQL );
 
    while( cmd.MoveNext() == S_OK )
    {
        _tprintf( _T("%sn"), OLE2T( cmd.GetColumnName(1) ) );
        _tprintf( _T("--------------------n") );
        _tprintf( _T("%sn"), (LPCTSTR)cmd.GetString(1) );
    }
    ses.Close();
    ds.Close();
 
    CoInitialize(NULL);
 
    return 0;
}

ソースコード(VC + OLE DB + SQL Server)

#include <atldbcli.h>
 
int _tmain( int argc, TCHAR* argv[] )
{
    CoInitialize(NULL);
    USES_CONVERSION;
 
    CDataSource ds;
    CSession ses;
    CCommand<CDynamicAccessor> rs;
 
    WCHAR szCon[] = L"PROVIDER=SQLOLEDB;SERVER=(local);DATABASE=master;UID=sa;PWD=P@ssW0rd";
    WCHAR szSQL[] = L"SELECT 'Hello, OLE DB World!' AS Message";
 
    ds.OpenFromInitializationString( szCon );
    ses.Open( ds );
    rs.Open( ses, szSQL );
    while( rs.MoveNext() == S_OK )
    {
        _tprintf( _T("%sn"), OLE2T( rs.GetColumnName(1) ) );
        _tprintf( _T("--------------------n") );
        _tprintf( _T("%sn"), (LPCTSTR)rs.GetValue(1) );
    }
    ses.Close();
    ds.Close();
 
    CoInitialize(NULL);
 
    return 0;
}

ソースコード(VC + OLE DB + Oracle)

#include <atldbcli.h>
 
int _tmain( int argc, TCHAR* argv[] )
{
    CoInitialize(NULL);
    USES_CONVERSION;
 
    CDataSource ds;
    CSession ses;
    CCommand<CDynamicAccessor> rs;
 
    WCHAR szCon[] = L"PROVIDER=MSDAORA;Data Source=ORCL;User ID=scott;Password=tiger";
    WCHAR szSQL[] = L"SELECT 'Hello, OLE DB World!' AS Message FROM DUAL";
 
    ds.OpenFromInitializationString( szCon );
    ses.Open( ds );
    rs.Open( ses, szSQL );
    while( rs.MoveNext() == S_OK )
    {
        _tprintf( _T("%sn"), OLE2T( rs.GetColumnName(1) ) );
        _tprintf( _T("--------------------n") );
        _tprintf( _T("%sn"), (LPCTSTR)rs.GetValue(1) );
    }
    ses.Close();
    ds.Close();
 
    CoInitialize(NULL);
 
    return 0;
}

コンパイル&リンク方法(Visual C++)

C:¥> cl hello.cpp

実行結果

Message
--------------------
Hello, OLE DB World!

Tags:

Categories: library, OLE DB, SQL, SQL Server

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

WP-SpamFree by Pole Position Marketing