次の方法で共有


UpdatePV サンプルは、更新可能な読み取り/書き込みプロバイダーの実装方法を示す OLE DB プロバイダー テンプレート サンプルです。 具体的には、即時および遅延の挿入、更新、削除の実行方法を示します。 また、一部のウィザードでのプロバイダーとの対話を簡単にするスキーマ行セットの使い方も示します。 UpdatePV では、MyProv と同様に IRowsetLocateImpl クラスも示します。

プロバイダーでのデータの読み込みと保存に関するその他の技法については、「AdvancedPV サンプル : 高度なプロバイダー技法の例」を参照してください。

セキュリティに関するメモセキュリティに関するメモ

このサンプル コードは概念を示すためのものであり、その概念に関連するコードのみを示しています。特定の環境について必ずしもセキュリティ要件を満たしていませんので、そのまま使用しないでください。セキュリティおよびエラー処理コードを追加して、プロジェクトをより安全かつ堅牢にすることをお勧めします。これらのサンプル コードは、現状有姿のままで提供されるものであり、一切保証されていません。

サンプルとそのインストール手順を取得するには

Visual Studio のサンプルにアクセスするには

  • [ヘルプ] メニューの [サンプル] をクリックします。

    既定では、これらのサンプルは drive:\Program Files\Microsoft Visual Studio 10.0\Samples\ にインストールされています。

  • このサンプルの最新版および他のサンプルの一覧については、MSDN Web サイト上で Visual Studio サンプル 」を参照してください。

サンプルのビルドと実行

このサンプルの機能を示すには、サンプルをビルドし、プロバイダーのアクセサーを使用してコンシューマー プロジェクトを作成し、データにアクセスしたり、データを出力したりするコンソール アプリケーションを作成します。

このサンプルをビルドして実行するには

  1. ソリューション ファイル UpdatePV.sln を開きます。

  2. From the Build menu, click Build Solution.

  3. ATL プロジェクト ウィザードでコンシューマー プロジェクトを作成します。このプロジェクトは属性付き .dll にします。

  4. OLE DB コンシューマーをコンシューマー プロジェクト (からクラスの追加、ATL OLE DB コンシューマーの選択 ) を追加してください。

  5. ATL OLE DB コンシューマー ウィザードで、データ ソースの ボタンをクリックし、 でデータ リンク プロパティ の UpProv OLE DB プロバイダーを選択します。 UpProv プロバイダーは UpdatePV のビルド時に自動的に登録されますが、この一覧に表示されていない場合は、UpdatePV.dll で regsvr32.exe を実行してください。

  6. Next を移動するには、 ] タブの接続を を使用する初期カタログを入力、MyData.txt へのパス名が正しいか確認する] をクリックします。

  7. の OK をクリックします。 データベース オブジェクトの選択 ダイアログが表示される、し、 テーブル; を開く項目を 1 つだけです。MyData.txt のパス名。 このアイテムを選択し、[OK] をクリックします。 ATL OLE DB コンシューマー ウィザードに戻ります。

  8. ATL OLE DB コンシューマー ウィザードで、のテーブルを選択、クラスに何か短い (必要に応じて) CMyConsなど、名前を変更および完了の をクリックします。

  9. [OK] をクリックし、ポップアップ表示されるセキュリティの警告ダイアログ ボックスを閉じます。

  10. 次の行を CMyCons.h から削除します。

    #error Security Issue: The connection string may contain a password
    

    この行が原因で、コンパイルできなくなります。ただし、(実際には) 機密情報を保護する必要があるという警告を表示するために挿入されています。

  11. ソリューション エクスプローラーでプロジェクトのノードを右クリックし、[ビルド] をクリックして、コンシューマー プロジェクトをビルドします。

  12. コンソール アプリケーションを新規作成します。 .cpp ファイルで、コンシューマー ヘッダーをインクルードし、コードを次のように変更します。

    #include "stdafx.h"
    #include <atldbcli.h>
    #include "..\consumer\cmycons.h"
    
    int _tmain(int argc, _TCHAR* argv[])
    {
       HRESULT hr = CoInitialize(NULL);
    
       CMyCons c;
    
       hr = c.OpenAll();
       ATLASSERT( SUCCEEDED( hr ) );
    
       hr = c.MoveFirst();
       while( SUCCEEDED(hr) && hr != DB_S_ENDOFROWSET )
       {
          printf( "%d %s %s %s %s\n", c.m_Fixed, c.m_Command, c.m_Text, 
             c.m_Command2, c.m_Text2 );
          hr = c.MoveNext();
       }
    
       c.CloseAll();
       CoUninitialize();
       return 0;
    }
    
  13. CoUninitialize 関数では、ブレークポイントを設定します。これにより、コンソールの結果を表示するために開いたままになります。 [開始] をクリックして、開発環境でコンソール アプリケーションを実行します。 5 列のテキスト (インデックスが 1 列およびテキストが 4 列) が出力されます。

サンプルの動作

UpdatePV は、C ランタイム ファイル入出力関数の最上位に作成されます。 これはデータ ストアを表します。 具体的には、サンプルはデータ要素のペアで構成されるテキスト ファイルを取得し、それを行セットに変換します。 サンプルには、データ要素のペアを含む MyData.txt というテキスト ファイルが付属しています。 ただし、サンプルは任意のテキスト ファイルに対して実行できます。解析の結果、すべての要素は 2 語ずつ区切られます。

UpdatePV の読み取り操作で RUpdateRowset::Execute (rowset.h) を実行します。 RUpdateRowset::FlushData で (rowset.h)、書き込み操作に処理されます。 これらは、標準プロバイダー操作の一部として OLE DB プロバイダー テンプレートによって呼び出される関数です。 このサンプルでは、OLE DB プロバイダー テンプレートの IRowsetChangeImpl クラスと IRowsetUpdateImpl クラスを使用します。 IRowsetChangeImpl クラスでは、即時の挿入、更新、および削除をサポートします。 IRowsetUpdateImpl クラスでは、遅延の挿入、更新、および削除をサポートします。 IRowsetUpdateImpl クラスは、IRowsetChangeImpl を継承します。 データを取得/設定の詳細については、読み取りの作成、Visual C++ のドキュメントでは、更新可能なプロバイダー https://msdn.microsoft.com/ja-jp/library/1cs8bsah(v=vs.100)更新データの行セットのOLE DB プログラマで Windows SDK のドキュメントを参照するとします。

UpdatePV は、スキーマ行セットもサポートします。 スキーマ行セットを使用すると、コンシューマーでは行セットを開いたりコマンドを実行したりせずに、プロバイダーの情報を検索できます。 Visual C++ ウィザードでは、スキーマ行セットを使用してクライアント側のアクセサーを生成します。 主な機能は、CUpdateSessionTRSchemaRowset::ExecuteCUpdateSessionColSchemaRowset::ExecuteCUpdateSessionPTSchemaRowset::Execute です。 3 つの関数はすべて、プロバイダーがサポートするテーブル、テーブルの列、およびテーブルのデータ型に関する情報を返します。 スキーマ行セットの詳細については、IDBSchemaRowset OLE DB プログラマ リファレンス インターフェイス」を参照してください。

Keywords

このサンプルでは次のインターフェイスを使用します。

IRowsetChange, IRowsetUpdateImpl

このサンプルでは、次のプロパティを使用します。

DBPROP_IRowsetChange , DBPROP_IRowsetUpdate

参照

その他の技術情報

ATL サンプル