次の方法で共有


XML データへのアクセス

データソースから XML データを取得するには、CStreamRowset を使う方法と、CXMLAccessor を使う方法の 2 種類があります。

機能 CStreamRowset CXMLAccessor
転送されるデータ量 すべての列と行から一度にデータを取得します。 すべての列からデータを取得しますが、一度に行うのは 1 行だけです。 MoveNext などのメソッドを使って行をナビゲートする必要があります。
文字列の書式設定 SQL Server で、XML 文字列を書式設定してコンシューマーに送信します。 行セット データをネイティブな形式 (プロバイダーに Unicode 文字列として送信するよう要求) で取得し、データを保持する文字列を XML 形式で構築します。
書式設定を制御する SQL Server 2000 固有のプロパティを設定することで、XML 文字列の書式設定をある程度制御することができます。 生成される XML 文字列の形式については制御できません。

CStreamRowset は、XML 形式のデータの取得には全般的に見れば効率の良い方法ですが、SQL Server 2000 でのみサポートされています。

CStreamRowset を使った XML データの取得

CCommand または CTable 宣言の中で、CStreamRowset を行セット タイプとして指定します。 たとえば、独自のアクセサーと一緒に、またはアクセサーなしで使うことができます。次に例を示します。

CCommand<CAccessor<CMyAccessor>, CStreamRowset> myCmd;

または

CCommand<CNoAccessor, CStreamRowset> myCmd;

通常、CCommand::Open を (たとえば、CRowsetTRowset クラスとして指定して) 呼び出すと、IRowset ポインターを取得します。 ICommand::Execute から IRowset ポインターが返され、CRowset オブジェクトの m_spRowset メンバーに格納されます。 MoveFirstMoveNextGetData などのメソッドは、そのポインターを使ってデータを取得します。

一方、(CStreamRowsetTRowset クラスとして指定して) CCommand::Open を呼び出した場合、ICommand::Execute から ISequentialStream ポインターが返され、CStreamRowsetm_spStream データ メンバーに格納されます。 その後、Read メソッドを使って、XML 形式の (Unicode 文字列) データを取得します。 次に例を示します。

myCmd.m_spStream->Read()

SQL Server 2000 は XML の書式設定を行い、行セットのすべての列とすべての行を 1 つの XML 文字列として返します。

Read メソッドの使用例については、「単純なコンシューマーの実装」のコンシューマーへの XML サポートの追加を参照してください。

Note

CStreamRowset による XML サポートは SQL Server 2000 でのみ動作し、OLE DB Provider for SQL Server 2000 (MDAC と共にインストール) が必要です。

CXMLAccessor を使った XML データの取得

CXMLAccessor を使うと、データ ストアのスキーマに詳しくない場合でも、データ ソースからのデータを文字列データとしてアクセスできます。 CXMLAccessorCDynamicStringAccessorW と同じように動作しますが、前者はデータ ストアからアクセスされたすべてのデータを XML 形式の (タグ付き) データとして変換します。 XML タグ名は、データ ストアの列名と可能な限り適合するものになります。

CXMLAccessor は,他のアクセサー クラスと同様に、CCommandCTable にテンプレート パラメーターとして渡して使います。

CTable<CXMLAccessor, CRowset> rs;

GetXMLRowData を使ってテーブルから 1 行ずつデータを取得し、MoveNext などのメソッドを使って行を移動します。例を示します。

// Open data source, session, and rowset
hr = rs.MoveFirst();

while(SUCCEEDED(hr) && hr != DB_S_ENDOFROWSET )
{
    CStringW strRowData;
    myCmd.GetXMLRowData(strRowData);

    printf_s( "%S\n", strRowData );

    hr = rs.MoveNext();
}

GetXMLColumnData を使って、列 (データ型) の情報を XML 形式の文字列データとして取得することができます。

関連項目

アクセサーの使用