現在オフラインです。再接続するためにインターネットの接続を待っています

Visual C++ .NET または Visual C++ 2005 を使用してデータベースから DataSet オブジェクトにデータを読み込む方法

Microsoft Visual Basic .NET については、次の資料を参照してください。301216
Microsoft Visual C# .NET については、次の資料を参照してください。314145
この資料では、次の Microsoft .NET Framework クラス ライブラリの名前空間を参照しています。

System.Data.SqlClient

この資料の内容

概要
この資料では、1 つ以上のデータベース クエリの結果を DataSet オブジェクトに設定する方法と、その DataSet オブジェクトに読み込まれたデータにアクセスする方法について、手順を追って説明します。DataSet オブジェクトは、Microsoft .NET Framework のデータ アクセスにおいて重要な役割を果たすメモリ内のオブジェクトで、テーブル、ビュー、およびリレーションシップを保持できます。

先頭に戻る
詳細

必要条件

必要なハードウェア、ソフトウェア、ネットワーク インフラストラクチャ、および Service Pack は、次のとおりです。
  • Microsoft Windows 2000 Professional、Windows 2000 Server、Windows 2000 Advanced Server、または Windows NT 4.0 Server
  • Pubs サンプル データベースをインストールした Microsoft SQL Server 7.0、Microsoft SQL Server 2000、または Microsoft Data Engine
  • Microsoft Visual Studio .NET または Microsoft Visual Studio 2005
この資料は、次のトピックについて詳しい知識のあるユーザーを対象としています。
  • データベースの用語
  • Microsoft SQL Server
先頭に戻る

データセットにデータを設定する

System.Data 名前空間に用意されているさまざまなオブジェクトを使用すると、データベース サーバーに接続してクエリを実行し、その結果を DataSet オブジェクトに格納できます。DataSet は非接続のオブジェクトです。したがって、いったんデータが読み込まれると、追加のデータを読み込むか、メモリ内にコピーされた情報を変更してサーバーを更新するまで、データベースへの接続は使用されなくなります。

データベースからデータセットにデータを読み込むには、以下の手順を実行します。
  1. Visual Studio .NET または Visual Studio 2005 を起動します。
  2. Visual C++ .NET 2002 で Managed C++ アプリケーションを新規作成するか、Visual C++ .NET 2003 でコンソール アプリケーションを新規作成するか、Visual C++ 2005 で CLR コンソール アプリケーションを新規作成します。プロジェクトに MyApplication という名前を付け、[OK] をクリックします。
  3. MyApplication.cpp ファイルに、次のコードを追加します。

    これにより、System.Dll、System.Xml、および System.Data の各名前空間への参照が追加されます。
    #using <System.Dll>#using <System.Data.Dll>#using <System.Xml.Dll>
  4. System、System.Data、System.Xml、System.Collections、および System.Data.SqlClient 名前空間に対して using ステートメントを使用します。これにより、以降のコードにおいて、これらの名前空間に含まれる宣言の修飾が不要になります。これらのステートメントは他のどの宣言よりも前に使用する必要があります。
    using namespace System;using namespace System::Data;using namespace System::Xml;using namespace System::Collections;using namespace System::Data::SqlClient;
  5. データベースからデータセットにデータを移動します。

    これを行うには、データベース接続を確立する必要があります。そのためには、System.Data.SqlClient.SqlCommand オブジェクトと接続文字列が必要です。次のコードでは、ローカル コンピュータ (コードを実行するコンピュータ) 上の SQL Server サーバーに接続する接続文字列が使用されています。この接続文字列は、使用している環境に合わせて変更する必要があります。SqlConnection オブジェクトが作成されたら、そのオブジェクトの Open メソッドを呼び出して実際のデータベース リンクを確立します。
    SqlConnection* objConn;String* sConnectionString;sConnectionString = "Password=myPassword;User ID=myUserID;Initial Catalog=pubs;Data Source=(local)";objConn = new SqlConnection(sConnectionString);objConn->Open();
  6. データベースと DataSet オブジェクト間のリンクを表す DataAdapter オブジェクトを作成します。DataAdapter のコンストラクタ オブジェクトの一部として、データの取得に使用する SQL またはその他の種類のコマンドを指定できます。次のサンプルでは、Pubs データベースの Authors テーブルからレコードを取得する SQL ステートメントを使用しています。
    SqlDataAdapter* daAuthors = new SqlDataAdapter("Select * From Authors", objConn);
  7. DataSet オブジェクトを宣言してインスタンスを作成します。

    このとき、データの読み込みを開始する前にデータセット全体の名前を指定する必要があります。この名前には、複数の異なるテーブルを含めることができます。
    DataSet* dsPubs = new DataSet("Pubs");
  8. データを読み込むには、FillSchema に続けて Fill を実行します。

    SqlDataAdapter クラスには、データの読み込みにおいて重要な役割を果たす、Fill と FillSchema という 2 つのメソッドが用意されています。これらのメソッドは、いずれもデータセットに情報を読み込むもので、Fill メソッドではデータそのものが読み込まれます。これに対して FillSchema メソッドでは、特定のテーブルに関する利用可能なメタデータ (列名、主キー、制約など) がすべて読み込まれます。
    daAuthors->FillSchema(dsPubs,SchemaType::Source, "Authors");daAuthors->Fill(dsPubs,"Authors");

    Fill のみを使用した場合は、列名とデータ型を記述するために必要となる基本的なメタデータだけが読み込まれます。Fill メソッドでは主キー情報は読み込まれません。このデフォルトの動作を変更するには、DataAdapter オブジェクトの MissingSchemaAction プロパティを MissingSchemaAction.AddWithKey に変更します。これにより、デフォルトの情報と共に主キーのメタデータも読み込まれるようになります。
    daAuthors->MissingSchemaAction = MissingSchemaAction::AddWithKey;daAuthors->Fill(dsPubs,"Authors");
    これにより、DataSet の Tables コレクションに含まれる個々の DataTable オブジェクトとして、データを使用できるようになります。FillSchema および Fill を呼び出すときにテーブル名を指定した場合は、その名前を使用して対象となるテーブルにアクセスできます。
    DataTable* tblAuthors = dsPubs->Tables->Item["Authors"];
  9. GetEnumerator 関数を使用して DataTable の Rows コレクション内の DataRow オブジェクトにアクセスできます。while ループを使用して、テーブルの各行にアクセスします。列にアクセスするには、名前または位置を示すインデックス (最初の列の位置は 0 (ゼロ) です) を使用します。
    IEnumerator* iEnum = tblAuthors->Rows->GetEnumerator();         while(iEnum->MoveNext()) {        Console::WriteLine("{0}   {1}",dynamic_cast<String*>(dynamic_cast<DataRow *>(iEnum->Current)->get_Item("au_fname")),                                       dynamic_cast<String*>(dynamic_cast<DataRow *>(iEnum->Current)->get_Item("au_lname"))); }
  10. プロジェクトを保存します。[デバッグ] メニューの [開始] をクリックしてプロジェクトを実行します。

先頭に戻る

完全なコード リスト

// This is the main project file for the VC++ application project // that is generated by using the Application wizard.#include "stdafx.h"#using <mscorlib.dll>#include <tchar.h>#using <System.Dll>#using <System.Data.Dll>#using <System.Xml.Dll>using namespace System;using namespace System::Data;using namespace System::Xml;using namespace System::Collections;using namespace System::Data::SqlClient;// This is the entry point for this application.int _tmain(void){    SqlConnection* objConn;    try    {                String* sConnectionString;        sConnectionString = "Password=myPassword;User ID=myUserID;Initial Catalog=pubs;Data Source=(local)";        objConn = new SqlConnection(sConnectionString);        objConn->Open();                SqlDataAdapter* daAuthors = new SqlDataAdapter("Select * From Authors", objConn);        DataSet* dsPubs = new DataSet("Pubs");                daAuthors->FillSchema(dsPubs,SchemaType::Source, "Authors");        daAuthors->Fill(dsPubs,"Authors");        DataTable* tblAuthors = dsPubs->Tables->Item["Authors"];                IEnumerator* iEnum = tblAuthors->Rows->GetEnumerator();                while(iEnum->MoveNext())        {            Console::WriteLine("{0}   {1}",dynamic_cast<String*>(dynamic_cast<DataRow *>(iEnum->Current)->get_Item("au_fname")),                                           dynamic_cast<String*>(dynamic_cast<DataRow *>(iEnum->Current)->get_Item("au_lname")));                    }    }    catch(Exception *ex)    {        Console::WriteLine( ex->Message );    }    __finally    {        objConn->Close();    }        return 0;}
: Visual C++ 2005 で上記のコード サンプルを正常にコンパイルするには、共通言語ランタイム サポートのコンパイラ オプション (/clr:oldSyntax) を追加する必要があります。 Visual C++ 2005 で共通言語ランタイム サポートのコンパイラ オプションを追加するには、次の手順を実行します。
  1. [プロジェクト] メニューの [<ProjectName> のプロパティ] をクリックします。

    : <ProjectName> には、プロジェクトの名前が入ります。
  2. [構成プロパティ] を展開し、[全般] をクリックします。
  3. 右側のウィンドウで、[共通言語ラインタイム サポート] のプロジェクト設定で [共通言語ランタイム サポート、古い構文 (/clr:oldSyntax)] をクリックします。[適用] をクリックして、[OK] をクリックします。
共通言語ランタイム サポートのコンパイラ オプションの詳細については、次のマイクロソフト Web サイトを参照してください。
/clr (共通言語ランタイムのコンパイル)
http://msdn2.microsoft.com/ja-jp/k8d11d4s.aspx
先頭に戻る
プロパティ

文書番号:818779 - 最終更新日: 05/16/2007 03:29:22 - リビジョン: 3.1

Microsoft Visual C++ 2005 Express Edition, Microsoft Visual C++ .NET 2003 Standard Edition, Microsoft Visual C++ .NET 2002 Standard Edition, Microsoft ADO.NET 1.1, Microsoft ADO.NET 1.0

  • kbsystemdata kbsqlclient kbhowtomaster kbhowto KB818779
フィードバック
tml>tml>/body>