Visual C++ .NET veya Visual C++ 2005 kullanarak bir <a0>DataSet</a0> nesnesinden bir veritabanını güncelleştirme

Makale çevirileri Makale çevirileri
Makale numarası: 815660 - Bu makalenin geçerli olduğu ürünleri görün.
Hepsini aç | Hepsini kapa

Bu Sayfada

Özet

Bu adım adım makalede, (bir veritabanından yüklenen) veri içeren bir DataSet nasıl gösterir, bu verileri değiştirmek ve sonra özgün kaynağı güncelleştirmek için yeniden veritabanına göndermek.

DataSet, Microsoft .NET Framework, veri erişim anahtarı bir parçası, tablolar, görünümler ve ilişkilerini tutan bellek içi nesneleri nesneleridir.

Gereksinimler

Aşağıdaki listede, gereksinim duyacağınız donanım, yazılım, ağ altyapısı ve hizmet paketleri önerilmektedir:
  • Aşağıdakilerden biri: Microsoft Windows 2000 Professional, Microsoft Windows 2000 Server, Microsoft Windows 2000 Advanced Server veya Microsoft Windows NT 4.0 Server
  • Aşağıdakilerden biri: Microsoft SQL Server sürüm 7.0, Microsoft SQL Server 2000 veya Microsoft Data Engine (MSDE) PUBS örnek veritabanı ile uygun izinleri, kullanıcı kimliği ve parola ile değerleri yüklü.
  • Microsoft Visual Studio .NET veya Microsoft Visual Studio 2005
Bu makalede, aşağıdaki konularda bilgi sahibi olduğunuz varsayılmaktadır:
  • Veritabanı terminolojisi
  • Yapılandırılmış sorgu dili (SQL)


Bir veritabanından bir DataSet nesne güncelleştirme nasıl yüklenir

Bu bölüm, DataSet nesnesi bir veritabanındaki verileri güncelleştirmek için nasıl kullanılacağını gösterir.

Önemli Bir SqlCommand nesnesi, ekleme, güncelleştirme ve verileri bir veritabanında doğrudan silmek için de kullanabilirsiniz.

DataSet yüklendikten sonra verileri değiştirebilirsiniz. DataSet, bu değişiklikleri izler. DataSet nesnesi bir veritabanından alınan verileri bir bellek içi önbellek olarak düşünülebilir. DataSet nesnesi bir topluluğu tabloları, ilişkileri ve sınırlamaları içerir.

Bir DataSet güncelleştirmek ve bu güncelleştirmeleri veritabanına geri göndermek için aşağıdaki adımları izleyin:
  1. Microsoft Visual Studio 2005 ya da Microsoft Visual Studio. NET'i açın.
  2. Yeni bir C++ uygulama yönetilen Visual C++ .NET ile oluşturun. Visual Studio main() fonksiyon oluşturur. Oluşturulan kod main() işlevinden kaldırın.
  3. Sistem ve System.Data ad için bir başvuru eklemek için <a0></a0>, <a1>
    #using <System.Dll>
    #using <System.Data.Dll>
    #using <System.Xml.Dll>
  4. Bu ad boşluklarında kodunuzu daha sonra gelen bildirimleri nitelemek için gerekli değildir, KULLANARAK ifade Sistem ve System.DataSystem.Data.SqlClient ad kullanın. Bu deyimleri tüm diğer bildirimlerden önce kullanmalısınız.
    using namespace System;
    using namespace System::Data;
    using namespace System::Xml;
    using namespace System::Data::SqlClient;
    
  5. Verileri değiştirmek ve değişiklikleri veritabanına geri göndermek için önce DataSet içinde bilgileri yüklemeniz gerekir.

    Yerel bilgisayar (veya kod çalıştığı bilgisayar) bulunan bir SQL Server bağlantı dizesinde aşağıdaki kodu gösterir. Bu dize ile kendi ayarlarınızı değiştirin.

    Özetlemek için <a0></a0>, bir bağlantı oluşturulur ve sonra bir veri bağdaştırıcısı, DataSet verilerle doldurmak için kullanılan oluşturulur.
    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");
    
    Common language runtime eklemeniz gerekir Not desteği derleyici seçeneği (/ clr:oldSyntax) başarıyla önceki kod örneğini derlemek için Visual C++ 2005'te. Visual C++ 2005'te ortak dil çalışma zamanı destek derleyici seçeneği eklemek için aşağıdaki adımları izleyin:
    1. Project tıklatın ve sonra <ProjectName> Özellikleri.

      Not<ProjectName> projenin adı için yer tutucudur.
    2. Yapılandırma özellikleri ' ni genişletin ve sonra Genel ' i tıklatın.
    3. Seçmek için tıklatın ortak dil çalışma zamanı modülü ve Destek, eski sözdizimi (/ clr:oldSyntax)Common Language Runtime desteği proje ayarında sağ bölmede, Uygula ' yı tıklatın ve sonra Tamam ' ı tıklatın.
    Ortak dil çalıştırma hakkında daha fazla bilgi için derleyici seçeneği destekleyen, aşağıdaki Microsoft Web sitesini ziyaret edin:
    / clr (ortak dil çalışma zamanı derleme)
    http://msdn2.microsoft.com/en-us/library/k8d11d4s.aspx
    Bu adımlar, tüm makaleyi için geçerlidir.
  6. Artık veriler yüklenir, onu değiştirebilirsiniz. Bir satır (veya kaydın) eklemek için birçok yol vardır. Bu kod örneği, üç adımlı bir yordamı kullanır:
    1. Yeni bir DataRow nesnesi DataTable nesnesinden edinin.
    2. DataRow alan değerleri gerektiği şekilde ayarlayın.
    3. Bu yeni nesne DataTable.Rows tahsilat Add yöntemine geçirin.

    Adım 5'te kodundan sonra aşağıdaki kodu yapıştırın:
    // 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. Varolan bir satırı düzenlemek için <a0></a0>, uygun DataRow nesnesini alın ve sonra da bir veya daha çok sütun için yeni değerleri sağlar. Ilk veri (ça?r? FillSchema adım 5'te) yanı sıra, tablonun şema yüklü olduğundan çok daha kolay doğru satır bulmak gerekir. Şema yerinde, tablo, birincil anahtar sütunu olduğunu biliyor ve satır topluluğunun <a2>Bul</a2> yöntemini kullanılabilir.

    Bul yöntemi (Bu durumda, au_id) birincil anahtarı DataRow nesnenin belirli bir değeri verir. DataRow, oluşturduktan sonra bu sütunları değiştirebilir. BeginEdit ve EndEdit değişiklikler kaydırma gerekmez, ancak bu DataSet yapmak sahip ve EndEdit çağrıldığında, doğrulama denetimleri aynı anda gerçekleştirilecek DataSet sağlayan iş kolaylaştırır.

    Adım 6 kodundan sonra aşağıdaki kodu yapıştırın:
    // 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. Özgün veritabanının tüm bu değişiklikleri güncelleştirmek için <a0></a0>, DataSet, DataAdapter nesneyi güncelleştirme yönteme geçirin.

    Ancak, Güncelleştir ' i aramadan önce DataAdapter nesnesinin ınsertcommandUpdateCommand ve DeleteCommand özelliklerini ayarlamanız gerekir. El ile SQL yazma ve bu üç özellik karşılık gelen SqlCommand nesnelerle doldurmak, ancak Visual Studio. NET'in üç komutlar otomatik olarak oluşturmak için de kullanılabilir.

    Gerektiğinde, gerekli komutları oluşturmak için <a0></a0>, SqlCommandBuilder nesnesinin bir kopyas?n? oluşturup DataAdapter oluşturucu içinde kullanmanız gerekir. (Aşağıdaki kod örneğinde gösterilen) bu yöntemi kullanmak istiyorsanız, tablonuz için birincil anahtar bilgileri kullanılabilir olması gerekir. Birincil anahtar bilgilere erişmek için <a0></a0>, FillSchema, arama ve sonra da AddWithKey için sizin DataAdapter MissingSchemaAction özelliğini ayarlayın veya birincil anahtar, kodunuzda el ile ayarlayın.

    Koddaki adım 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. Satır tamamen silmek için <a0></a0>, DataRow</a0> nesnesinin <a2>Sil</a2> yöntemini kullanın.

    Not Satır koleksiyonu ve RemoveAt, satırı silin, ancak bunun yerine yalnızca satır topluluktan kaldırmak gibi iki yöntem içerir. Yalnızca delete yöntemi, silme, kaynak veritabanına gönderir.

    8. Adımda kodundan sonra aşağıdaki kodu yapıştırın:
    //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. Değişiklikler, eklemiş olduğunuz önceki kaydı kaldırmak için SQL Server'a gönderin.

    Adım 9 kodundan sonra aşağıdaki kodu yapıştırın:
    // 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. Projenizi kaydetmek.
  12. Hata Ayıkla menüsünde Proje çalıştırmak için Başlat ' ı tıklatın.

    Kod ilerleyişini gösterir ve kod ilerledikçe verilerin geçerli durumunu gözden geçirmek izin birkaç ileti kutularında görünen bildirimi.


Kod dökümü tamamlayın.

// 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 ();
    }
}


Referanslar

ADO.NET kullanma hakkında daha fazla bilgi için DataSet nesneleri ve SQL, aşağıdaki Microsoft Web sitelerini ziyaret edin:

Özellikler

Makale numarası: 815660 - Last Review: 19 Mart 2007 Pazartesi - Gözden geçirme: 5.2
Bu makaledeki bilginin uygulandığı durum:
  • Microsoft Visual C++ 2005 Express Edition
  • Microsoft Visual C++ .NET 2002 Standard Edition
Anahtar Kelimeler: 
kbmt kbsystemdata kbsqlclient kbhowtomaster kbhowto KB815660 KbMttr
Machine-translated Article
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.
Makalenin İngilizcesi aşağıdaki gibidir:815660

Geri Bildirim Ver

 

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