Visual C を使用して DataSet オブジェクトからデータベースを更新する方法。NET または Visual C 2005

文書翻訳 文書翻訳
文書番号: 815660
すべて展開する | すべて折りたたむ

目次

概要

この資料で使用する方法を示しています、 データセット (データベースから読み込まれる) データ、方法はするのにはそのデータを作成] をポイントし、[更新内容をデータベースに送信する方法を変更する、元のソース。

データセット オブジェクト キーの一部では、Microsoft のデータ アクセス。NETフレームワークは、テーブル、ビュー、保持できるメモリ内オブジェクトがあるとリレーションシップです。

要件

次の一覧は、推奨されるハードウェア、ソフトウェアです、ネットワーク インフラストラクチャ、および必要な service pack:
  • 次のいずれか: Microsoft Windows 2000 ProfessionalMicrosoft Windows 2000 Server、Microsoft Windows 2000 Server では、高度なかMicrosoft Windows NT 4.0 サーバー
  • 次のいずれか: Microsoft SQL Server version 7.0 では、Microsoft SQL Server 2000、または Microsoft データ エンジン (MSDE) の PUBS サンプルデータベースのインストール適切なアクセス許可、ユーザー Id とパスワードの値を指定します。
  • マイクロソフトの Visual Studio。NET またはマイクロソフトの Visual Studio 2005
この資料で、次のように精通していることを想定しています。トピック:
  • データベースの用語
  • 構造化照会言語 (SQL)


DataSet オブジェクトからデータベースを更新する方法

このセクションを使用する方法を示しています、 データセット データベース内のデータを更新するオブジェクト。

重要です できます、 SqlCommand オブジェクトを挿入、更新、およびデータベース内のデータを削除するのには直接。

後、 データセット 読み込んだデータを変更することができますです。は、 データセット これらの変更を追跡します。は、 データセット オブジェクトは、メモリ内キャッシュのデータと見なされるデータベースから取得します。は、 データセット テーブル、リレーションシップのコレクションのオブジェクトがあります、制約。

更新するのには データセット 更新内容をデータベースに送信する、次の手順を実行します。
  1. Microsoft Visual Studio を開きます。NET またはマイクロソフトの Visual Studio 2005。
  2. 新規作成します。 マネージ C++ アプリケーション でVisual C.NET。Visual Studio を作成します。 main() 関数です。生成されたコードから削除、 main() 関数です。
  3. 参照を追加するのには システムSystem.Data 名前空間は、次のコードを追加します。
    #using <System.Dll>
    #using <System.Data.Dll>
    #using <System.Xml.Dll>
  4. 使用して、 使用します。 ステートメントでは、 システム, System.Data、、 System.Data.SqlClient 名前空間の宣言を修飾する必要はありませんようにこれらの名前空間をコード内で後で。前にこれらのステートメントを使用する必要があります。その他の宣言します。
    using namespace System;
    using namespace System::Data;
    using namespace System::Xml;
    using namespace System::Data::SqlClient;
    
  5. データを修正し、送信することができます前に、変更をバックアップします。データベースには情報を読み込む必要があります、 データセット.

    次のコードに接続文字列を指すSQL サーバーがローカル コンピューターに配置されている (または、コンピューターは、コードの実行)。この文字列は、独自の設定を交換してください。

    要約すると、接続が作成され、され、データ アダプター作成した、使用には、 データセット データを使用します。
    SqlConnection  *objConn;
    String *sConnectionString;
    sConnectionString = "Password=StrongPassword;User ID=UserName;Initial Catalog=pubs;Data Source=(local)";
    
    objConn = new SqlConnection(sConnectionString);
    objConn->Open();
            
    // Create an instance of a DataAdapter.
    SqlDataAdapter* daAuthors = new SqlDataAdapter("Select * From Authors", objConn);
    
    // Create an instance of a DataSet, and retrieve data from the Authors table.
    DataSet* dsPubs = new DataSet("Pubs");
    daAuthors->FillSchema(dsPubs,SchemaType::Source, "Authors");
    daAuthors->Fill(dsPubs,"Authors");
    
    メモ 共通言語ランタイム サポートのコンパイラ オプションを追加する必要があります (//clr:oldsyntax) 正常に上記のコード サンプルをコンパイルする Visual C 2005 で。Visual C 2005 で、共通言語ランタイム サポート コンパイラ オプションを追加するには、次の手順を実行します。
    1. クリックしてください。 プロジェクト、し <projectname></projectname> プロパティ.

      メモ <projectname></projectname> プロジェクトの名前のプレース ホルダーです。
    2. 展開 構成プロパティ、し全般.
    3. 選択する] をクリックします。 共通言語ランタイム サポート、古い構文 (または/clr:oldsyntax) で、共通言語ランタイムのサポート 右側のウィンドウでの設定のプロジェクトについてをクリックしてください 適用、し [OK].
    共通言語ランタイムの詳細についてはコンパイラ オプションをサポートは、次のマイクロソフト Web サイトを参照してください。
    /clr (共通言語ランタイムのコンパイル)
    http://msdn2.microsoft.com/en-us/library/k8d11d4s.aspx
    これらの手順は資料全体に適用されます。
  6. データが読み込まれた後は、それを変更できます。は行 (またはレコード) を追加するのには、多くの方法。このサンプル コードでは、3 つの手順を使用してください。手順:
    1. 新規取得します。 DataRow オブジェクトを データ テーブル.
    2. 設定は、 DataRow フィールドの値を必要に応じてします。
    3. その新しいオブジェクトに渡します、 追加 メソッドは、 DataTable.Rows コレクションです。

    手順 5 で、コードの後次のコードを貼り付けます。
    // BEGIN ADD CODE 
    // Create a new instance of a DataTable.
    DataTable* tblAuthors = dsPubs->Tables->Item["Authors"];
    
    
    // Obtain a new DataRow object from the DataTable.
    DataRow* drCurrent = tblAuthors->NewRow();
    
    // Set the DataRow field values as necessary.
    drCurrent->set_Item("au_id",new String("993-21-3427"));
    
    drCurrent->set_Item("au_fname",new String("George"));
    drCurrent->set_Item("au_lname",new String("Johnson"));
    drCurrent->set_Item("phone",new String("800 226-0752"));
    drCurrent->set_Item("address", new String ("1956 Arlington Pl."));
    drCurrent->set_Item("city", new String("Winnipeg"));
    drCurrent->set_Item("state", new String("MB"));
    drCurrent->set_Item("contract",__box(1));
    
    // Pass that new object into the Add method of the DataTable.
    tblAuthors->Rows->Add(drCurrent);
    Console::WriteLine("Add was successful, Click any key to continue!!");
    Console::ReadLine();
    
    // END ADD CODE  
    
  7. 既存の行を編集するには、適切な取得します。 DataRow オブジェクト、および、1 つまたは複数の列に新しい値を入力します。、最初の正しい行をロードするため、はるかに簡単ですを見つける必要があります、データ (への呼び出しと同様に、テーブルのスキーマ FillSchema 手順 5 で)。インプレースのスキーマと、テーブルは知っています。列が主キーとは 検索 メソッドは、 コレクションがあります。

    は、 検索 メソッドを返します、 DataRow オブジェクトが特定の値では、主キー (この場合は、au_id)。その後 DataRow、列を変更することができます。ラップする必要はありませんが変更 BeginEditEndEdit、が、この作業が簡単になりますが、 データセット 実行する必要があり、ことができます、 データセット 妥当性検査は、同時に実行するとします。 EndEdit 呼ばれます。

    後で、次のコードを貼り付けます手順 6:
    // BEGIN EDIT CODE 
    
    drCurrent = tblAuthors->Rows->Find(new String("213-46-8915"));
    drCurrent->BeginEdit();
    
    drCurrent->set_Item("phone",String::Concat(S"342",(static_cast<String *>(drCurrent->Item["phone"]))->Substring(3)));
    drCurrent->EndEdit ();
    Console::WriteLine("Record edited successfully, Click any key to continue!!");
    Console::ReadLine();
    
    // END EDIT CODE
    
  8. すべてのこれらの変更は、元のデータベースを更新するのには渡す、 データセット には、 更新プログラム メソッドは、 データ アダプター オブジェクトです。

    ただし、する前に呼び出すことができます。 更新プログラムを設定する必要があります、 InsertCommand, UpdateCommand、、 DeleteCommand プロパティを データ アダプター オブジェクトです。手動で SQL を記述してこれら 3 つの設定対応するプロパティ SqlCommand オブジェクトではなく、Visual Studio することもできます。生成するのには、NETこれらのコマンドは自動的にします。

    必要なコマンドを生成するのには必要なときにのインスタンスを作成する必要があります、 SqlCommandBuilder オブジェクトし、を使用して、 データ アダプター コンス トラクターにします。このメソッドを使用する場合 (に示すように、次サンプル コード) は、使用できる主キー情報が必要テーブル。主キー情報にアクセスするには、コールします。 FillSchema、、を設定し、 MissingSchemaAction プロパティをデータ アダプターを構成する AddWithKey、またはコードで主キーを手動で設定します。

    貼り付け次のコードをコード手順 7 で。
    // BEGIN SEND CHANGES TO SQL SERVER 
    
    SqlCommandBuilder* objCommandBuilder = new SqlCommandBuilder(daAuthors);
    daAuthors->Update(dsPubs, "Authors");
    Console::WriteLine("SQL Server updated successfully, Check Server explorer to see changes");
    Console::ReadLine();
    
    // END SEND CHANGES TO SQL SERVER 
    
  9. 完全に行を削除するを使用して、 削除 メソッドは、 DataRow オブジェクトです。

    メモ Rows コレクションには、2 つの方法が含まれています、 削除RemoveAtは、行を削除するが、代わりにだけ、行を削除すると思われるコレクションから。のみ、 削除 メソッドを削除、元のデータベースに送信します。

    後、手順 8 のコードは、次のコードを貼り付けます。
    //BEGIN DELETE CODE 
    
    drCurrent = tblAuthors->Rows->Find(new String("993-21-3427"));
    drCurrent->Delete();
    Console::WriteLine("Record deleted successfully, Click any key to continue!!"); 
    Console::ReadLine();
    
    //END DELETE CODE  
    
  10. SQL のレコードを削除するサーバーに変更を送信すること以前のバージョンを追加します。

    手順 9 に、コードの後次のコードを貼り付けます。
    // CLEAN UP SQL SERVER
    daAuthors->Update(dsPubs, "Authors");
    Console::WriteLine("SQL Server updated successfully, Check Server explorer to see changes");
    Console::ReadLine();
    objConn->Close ();
    
  11. プロジェクトを保存します。
  12. で、 デバッグ メニューをクリックして開始 プロジェクトを実行します。

    表示数コードの進行状況を示すし、はメッセージ ボックスを表示します。コードの進行に応じて、データの現在の状態を確認してください。


完全なコード リスト

// This is the main project file for VC++ application project 
// generated using an Application Wizard.

#include "stdafx.h"

#using <mscorlib.dll>
#using <System.Dll>
#using <System.Data.Dll>
#using <System.Xml.dll>
#include <tchar.h>

using namespace System;
using namespace System::Xml;
using namespace System::Data;
using namespace System::Data::SqlClient;

// This is the entry point for this application
int _tmain(void)
{
    SqlConnection  *objConn;
    try
    {
        String *sConnectionString;
        sConnectionString = "Password=StrongPassword;User ID=UserName;Initial Catalog=pubs;Data Source=(local)";

        objConn = new SqlConnection(sConnectionString);
        objConn->Open();
        
        // Create an instance of a DataAdapter.
        SqlDataAdapter* daAuthors = new SqlDataAdapter("Select * From Authors", objConn);

        // Create an instance of a DataSet, and retrieve data from the Authors table.
        DataSet* dsPubs = new DataSet("Pubs");
        daAuthors->FillSchema(dsPubs,SchemaType::Source, "Authors");
        daAuthors->Fill(dsPubs,"Authors");

        // BEGIN ADD CODE 
        // Create a new instance of a DataTable.
        DataTable* tblAuthors = dsPubs->Tables->Item["Authors"];


        // Obtain a new DataRow object from the DataTable.
        DataRow* drCurrent = tblAuthors->NewRow();

        // Set the DataRow field values as necessary.
        drCurrent->set_Item("au_id",new String("993-21-3427"));

        drCurrent->set_Item("au_fname",new String("George"));
        drCurrent->set_Item("au_lname",new String("Johnson"));
        drCurrent->set_Item("phone",new String("800 226-0752"));
        drCurrent->set_Item("address", new String ("1956 Arlington Pl."));
        drCurrent->set_Item("city", new String("Winnipeg"));
        drCurrent->set_Item("state", new String("MB"));
        drCurrent->set_Item("contract",__box(1));

        // Pass that new object into the Add method of the DataTable.
        tblAuthors->Rows->Add(drCurrent);
        Console::WriteLine("Add was successful, Click any key to continue!!");
        Console::ReadLine();

        // END ADD CODE  
        
        // BEGIN EDIT CODE 

        drCurrent = tblAuthors->Rows->Find(new String("213-46-8915"));
        drCurrent->BeginEdit();

        drCurrent->set_Item("phone",String::Concat(S"342",(static_cast<String *>(drCurrent->Item["phone"]))->Substring(3)));
        drCurrent->EndEdit ();
        Console::WriteLine("Record edited successfully, Click any key to continue!!");
        Console::ReadLine();

        // END EDIT CODE

        // BEGIN SEND CHANGES TO SQL SERVER 

        SqlCommandBuilder* objCommandBuilder = new SqlCommandBuilder(daAuthors);
        daAuthors->Update(dsPubs, "Authors");
        Console::WriteLine("SQL Server updated successfully, Check Server explorer to see changes");
        Console::ReadLine();

        // END SEND CHANGES TO SQL SERVER 

        //BEGIN DELETE CODE 

        drCurrent = tblAuthors->Rows->Find(new String("993-21-3427"));
        drCurrent->Delete();
        Console::WriteLine("SRecord deleted successfully, Click any key to continue!!"); 
        Console::ReadLine();

        //END DELETE CODE  


        // CLEAN UP SQL SERVER
        daAuthors->Update(dsPubs, "Authors");
        Console::WriteLine("SQL Server updated successfully, Check Server explorer to see changes");
        Console::ReadLine();
    }
    catch (Exception* ex)
    {
        Console::WriteLine (ex->Message );
    }
    __finally
    {
        objConn->Close ();
    }
}


関連情報

ADO の使用の詳細については。NET では、DataSet オブジェクト、SQL は、次のマイクロソフト Web サイトを参照してください。

プロパティ

文書番号: 815660 - 最終更新日: 2011年7月28日 - リビジョン: 7.0
キーワード:?
kbhowto kbhowtomaster kbsqlclient kbsystemdata kbmt KB815660 KbMtja
機械翻訳の免責
重要: このサポート技術情報 (以下「KB」) は、翻訳者による翻訳の代わりに、マイクロソフト機械翻訳システムによって翻訳されたものです。マイクロソフトは、お客様に、マイクロソフトが提供している全ての KB を日本語でご利用いただけるように、翻訳者による翻訳 KB に加え機械翻訳 KB も提供しています。しかしながら、機械翻訳の品質は翻訳者による翻訳ほど十分ではありません。誤訳や、文法、言葉使い、その他、たとえば日本語を母国語としない方が日本語を話すときに間違えるようなミスを含んでいる可能性があります。マイクロソフトは、機械翻訳の品質、及び KB の内容の誤訳やお客様が KB を利用されたことによって生じた直接または間接的な問題や損害については、いかなる責任も負わないものとします。マイクロソフトは、機械翻訳システムの改善を継続的に行っています。
英語版 KB:815660
Microsoft Knowledge Base の免責: Microsoft Knowledge Baseに含まれている情報は、いかなる保証もない現状ベースで提供されるものです。Microsoft Corporation及びその関連会社は、市場性および特定の目的への適合性を含めて、明示的にも黙示的にも、一切の保証をいたしません。さらに、Microsoft Corporation及びその関連会社は、本文書に含まれている情報の使用及び使用結果につき、正確性、真実性等、いかなる表明・保証も行ないません。Microsoft Corporation、その関連会社及びこれらの権限ある代理人による口頭または書面による一切の情報提供またはアドバイスは、保証を意味するものではなく、かつ上記免責条項の範囲を狭めるものではありません。Microsoft Corporation、その関連会社 及びこれらの者の供給者は、直接的、間接的、偶発的、結果的損害、逸失利益、懲罰的損害、または特別損害を含む全ての損害に対して、状況のいかんを問わず一切責任を負いません。(Microsoft Corporation、その関連会社 またはこれらの者の供給者がかかる損害の発生可能性を了知している場合を含みます。) 結果的損害または偶発的損害に対する責任の免除または制限を認めていない地域においては、上記制限が適用されない場合があります。なお、本文書においては、文書の体裁上の都合により製品名の表記において商標登録表示、その他の商標表示を省略している場合がありますので、予めご了解ください。

フィードバック

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com