Cara update database SQL Server dengan menggunakan SqlDataAdapter objek dalam Visual C++.NET

Terjemahan Artikel Terjemahan Artikel
ID Artikel: 308510 - Melihat produk di mana artikel ini berlaku.
Perbesar semua | Perkecil semua

Pada Halaman ini

RINGKASAN

The SqlDataAdapter objek berfungsi sebagai jembatan antara ADO.NET DataSet objek dan Microsoft SQL Server database. Itu adalah perantara objek yang dapat Anda gunakan untuk melakukan hal berikut:
  • Mengisi ADO.NET DataSet dengan data yang Diperoleh dari SQL Server database.

    -dan-
  • Update database untuk mencerminkan perubahan (sisipan, pembaruan, menghapus) dilakukan untuk data dengan menggunakan DataSet.
Artikel ini memberikan Visual C++.Contoh kode bersih untuk menunjukkan bagaimana SqlDataAdapter objek dapat digunakan untuk memperbarui database SQL Server dengan data modifikasi yang dijalankan pada DataSet objek yang diisi dengan data dari tabel di database.

Informasi Selengkapnya

The InsertCommand, UpdateCommand, dan DeleteCommand sifat SqlDataAdapter objek yang digunakan untuk meng-update database dengan data modifikasi yang dijalankan pada DataSet objek. Masing-masing properti ini SqlCommand benda-benda yang menentukan masing-masing INSERT, UPDATE, dan DELETE Perintah TSQL yang digunakan untuk posting DataSet modifikasi untuk target database. The SqlCommand benda-benda yang ditugaskan untuk sifat-sifat ini dapat dibuat secara manual kode, atau dapat secara otomatis dihasilkan dengan menggunakan SqlCommandBuilder objek.

Sampel kode pertama dalam artikel ini menunjukkan bagaimana SqlCommandBuilder objek dapat digunakan untuk secara otomatis menghasilkan UpdateCommand properti SqlDataAdapter objek. Contoh kedua menggunakan skenario yang otomatis perintah generasi tidak dapat digunakan, dan oleh karena itu menunjukkan proses oleh yang Anda dapat secara manual membuat dan menggunakan SqlCommand objek sebagai UpdateCommand properti SqlDataAdapter objek.

Membuat sampel Tabel SQL Server

Untuk membuat tabel SQL Server contoh menggunakan dalam Visual C++.Contoh kode bersih didokumentasikan di artikel ini, ikuti langkah berikut:
  1. Buka SQL Server Query Analyzer, dan kemudian hubungkan ke database di mana Anda ingin membuat tabel contoh. Contoh kode ini artikel menggunakan database Northwind yang datang dengan SQL Server.
  2. Mengeksekusi pernyataan T-SQL berikut untuk membuat sampel meja disebut CustTest, dan kemudian masukkan catatan ke dalamnya:
    Create Table CustTest
    (
     CustID int primary key,
     CustName varchar(20)
    )
    
    Insert into CustTest values(1,'John')
    					

Kode sampel 1: Secara otomatis dihasilkan perintah

Jika pernyataan pilih untuk mengambil data yang digunakan untuk mengisi DataSet didasarkan pada tabel database tunggal, Anda dapat mengambil keuntungan dari CommandBuilder objek untuk secara otomatis menghasilkan DeleteCommand, InsertCommand, dan UpdateCommand sifat DataAdapter. Ini menyederhanakan dan mengurangi kode yang diperlukan untuk melakukan operasi INSERT, UDPATE, dan menghapus.

Sebagai persyaratan minimum, Anda harus mengatur SelectCommand properti untuk generasi otomatis perintah untuk bekerja. Tabel skema diperoleh oleh SelectCommand menentukan sintaks INSERT otomatis, UPDATE, dan DELETE pernyataan.

The SelectCommand harus juga kembali setidaknya satu kunci utama atau kolom yang unik. Jika tidak ada hadir, InvalidOperation pengecualian yang dihasilkan, dan perintah tidak dihasilkan.

Untuk membuat sampel Visual C++.NET konsol aplikasi yang menunjukkan cara menggunakan SqlCommandBuilder objek untuk secara otomatis menghasilkan InsertCommand, DeleteCommand, dan UpdateCommand SqlCommand objek properti untuk SqlDataAdapter objek, ikuti langkah berikut:
  1. Mulai Visual Studio.NET, dan kemudian membuat baru berhasil C++ aplikasi. Nama itu updateSQL.
  2. Copy dan paste kode berikut di updateSQL.cpp (menggantikan isinya default):
    #include "stdafx.h"
    
    #using <mscorlib.dll>
    #using <System.dll>
    #using <System.Data.dll>
    #using <System.Xml.dll>
    
    using namespace System;
    using namespace System::Data;
    using namespace System::Data::SqlClient;
    
    #ifdef _UNICODE
    int wmain(void)
    #else
    int main(void)
    #endif
    {
            SqlConnection *cn = new SqlConnection();
            DataSet *CustomersDataSet = new DataSet();
            SqlDataAdapter *da;
            SqlCommandBuilder *cmdBuilder;
      
            //Set the connection string of the SqlConnection object to connect
            //to the SQL Server database in which you created the sample
            //table in Section 1.0
            cn->ConnectionString =  "Server=server;Database=northwind;UID=login;PWD=password;";
    
            cn->Open();      
    
            //Initialize the SqlDataAdapter object by specifying a Select command 
            //that retrieves data from the sample table
            da = new SqlDataAdapter("select * from CustTest order by CustId", cn);
    
            //Initialize the SqlCommandBuilder object to automatically generate and initialize
            //the UpdateCommand, InsertCommand and DeleteCommand properties of the SqlDataAdapter
            cmdBuilder = new SqlCommandBuilder(da);
    
            //Populate the DataSet by executing the Fill method of the SqlDataAdapter
            da->Fill(CustomersDataSet, "Customers");
    
            //Display the Update, Insert and Delete commands that were automatically generated
            //by the SqlCommandBuilder object 
    	Console::WriteLine("Update command Generated by the Command Builder : ");
    	Console::WriteLine("==================================================");
    	Console::WriteLine(cmdBuilder->GetUpdateCommand()->CommandText);
    	Console::WriteLine("         ");
    
    	Console::WriteLine("Insert command Generated by the Command Builder : ");
    	Console::WriteLine("==================================================");
    	Console::WriteLine(cmdBuilder->GetInsertCommand()->CommandText);
    	Console::WriteLine("         ");        
    
    	Console::WriteLine("Delete command Generated by the Command Builder : ");
    	Console::WriteLine("==================================================");
    	Console::WriteLine(cmdBuilder->GetDeleteCommand()->CommandText);
    	Console::WriteLine("         ");
    
            //Write out the value in the CustName field before updating the data using the DataSet
    	DataRow *rowCust = CustomersDataSet->Tables->Item["Customers"]->Rows->Item[0];
    	Console::WriteLine("Customer Name before Update : {0} ", rowCust->Item["CustName"]);
    		
            //Modify the value of the CustName field
    	String *newStrVal = new String("Jack");  
            rowCust->set_Item("CustName", newStrVal);
    
            //Modify the value of the CustName field again
            String *newStrVal2 = new String("Jack2");  
            rowCust->set_Item("CustName", newStrVal2);
    
            //Post the data modification to the database
            da->Update(CustomersDataSet, "Customers");        
    
            Console::WriteLine("Customer Name after Update : {0} ", rowCust->Item["CustName"]);
    
    
            //Close the database connection
            cn->Close();
    
            //Pause
    	Console::ReadLine();
     	    
    		return 0;
    } 
    					
  3. Dalam kode Anda disalin dan disisipkan pada langkah 2, memodifikasi baris kode string connect benar tersambung ke komputer SQL Server Anda, sebagai berikut:
    cn.ConnectionString = "Server=server;Database=northwind;UID=login;PWD=password;";
    						
    Setelah Anda menjalankan kode ini, Anda dapat terhubung dengan SQL Server instalasi dan kemudian masuk.
  4. Menyimpan dan menjalankan aplikasi. Jendela konsol akan membuka dan menampilkan output berikut:
    Update command generated by the Command Builder: 
    ==================================================
    UPDATE CustTest SET CustID = @p1 , CustName = @p2 WHERE ( (CustID = @p3) AND ((CustName IS NULL AND @p4 IS NULL) OR (CustName = @p5)) )
             
    Insert command generated by the Command Builder : 
    ==================================================
    INSERT INTO CustTest( CustID , CustName ) VALUES ( @p1 , @p2 )
             
    Delete command generated by the Command Builder : 
    ==================================================
    DELETE FROM  CustTest WHERE ( (CustID = @p1) AND ((CustName IS NULL AND @p2 IS NULL) OR (CustName = @p3)) )   
          
    Customer Name before Update : John
    Customer Name after Update : Jack2
    					
  5. Tekan sembarang tombol untuk mengabaikan jendela konsol dan berhenti aplikasi.

Kode sampel 2: Secara manual membuat dan menginisialisasi properti UpdateCommand

Output yang dihasilkan oleh kode sampel 1 menunjukkan bahwa logika untuk menghasilkan perintah secara otomatis untuk UPDATE pernyataan didasarkan pada optimis concurrency. Yaitu, catatan tidak terkunci untuk mengedit dan dapat dimodifikasi oleh pengguna lain atau proses setiap saat. Karena catatan mungkin diubah setelah kembali dari pernyataan pilih tapi sebelum UPDATE pernyataan yang dikeluarkan, pernyataan UPDATE secara otomatis dihasilkan mengandung Klausul WHERE sehingga berturut-turut diperbarui hanya jika itu berisi semua nilai-nilai asli dan tidak telah dihapus. Hal ini dilakukan untuk memastikan bahwa data baru tidak ditimpa. Dalam kasus di mana pembaruan otomatis cuba memperbarui baris yang telah dihapus atau tidak berisi nilai-nilai asli ditemukan di DataSet, perintah tidak mempengaruhi catatan apapun, dan DBConcurrencyException dilemparkan.

Jika Anda ingin UPDATE untuk menyelesaikan Terlepas dari nilai-nilai asli, Anda akan perlu secara eksplisit menetapkan UpdateCommand untuk DataAdapter daripada mengandalkan perintah otomatis generasi.

Untuk secara manual membuat dan menginisialisasi UpdateCommand properti SqlDataAdapter objek yang digunakan dalam kode contoh 1, ikuti langkah berikut:
  1. Copy dan paste kode berikut (Timpa yang ada kode) Main() fungsi dalam UpdateSQL.cpp file dalam aplikasi C++ dibuat dalam kode contoh 1:
    SqlConnection *cn = new SqlConnection();
    DataSet *CustomersDataSet = new DataSet();
    SqlDataAdapter *da;
    SqlCommand *DAUpdateCmd;
    
    cn->ConnectionString = "Server=server;Database=northwind;UID=login;PWD=password;";
    cn->Open();
    
    da = new SqlDataAdapter("select * from CustTest order by CustId", cn);
    
    //Initialize the SqlCommand object that will be used as the DataAdapter's UpdateCommand
    //Notice that the WHERE clause uses only the CustId field to locate the record to be updated
    DAUpdateCmd = new SqlCommand("Update CustTest set CustName = @pCustName where CustId = @pCustId", da->SelectCommand->Connection);
    
    //Create and append the parameters for the Update command
    DAUpdateCmd->Parameters->Add(new SqlParameter("@pCustName", SqlDbType::VarChar));
    DAUpdateCmd->Parameters->Item["@pCustName"]->SourceVersion = DataRowVersion::Current;
    DAUpdateCmd->Parameters->Item["@pCustName"]->SourceColumn = "CustName";
    
    DAUpdateCmd->Parameters->Add(new SqlParameter("@pCustId", SqlDbType::Int));
    DAUpdateCmd->Parameters->Item["@pCustId"]->SourceVersion = DataRowVersion::Original;
    DAUpdateCmd->Parameters->Item["@pCustId"]->SourceColumn = "CustId";
    
    //Assign the SqlCommand to the UpdateCommand property of the SqlDataAdapter
    da->UpdateCommand = DAUpdateCmd;        
    da->Fill(CustomersDataSet, "Customers");        
    
    DataRow *rowCust = CustomersDataSet->Tables->Item["Customers"]->Rows->Item[0];
    Console::WriteLine("Customer Name before Update : {0} ", rowCust->Item["CustName"]);
    
    //Modify the value of the CustName field
    String *newStrVal = new String("Jack"); 
    rowCust->set_Item("CustName", newStrVal);
    
    //Modify the value of the CustName field again
    String *newStrVal2 = new String("Jack2");  
    rowCust->set_Item("CustName", newStrVal2);
    
    da->Update(CustomersDataSet, "Customers");        
    
    Console::WriteLine("Customer Name after Update : {0} ", rowCust->Item["CustName"]);
    
    cn->Close();
    Console::ReadLine();
    return 0;
    					
  2. Mengubah baris kode string connect di sebelumnya kode contoh sebagai berikut:
    cn.ConnectionString = "Server=server;Database=northwind;UID=login;PWD=password;";
    					
  3. Jika Anda sudah menjalankan kode "Kode sampel 1" bagian dari artikel ini, buka CustTest tabel SQL Server, dan kemudian mengubah CustName nilai dalam catatan pertama kembali keJohn.
  4. Menyimpan dan menjalankan aplikasi. Jendela konsol akan membuka dan menampilkan output berikut:
    Customer Name before Update : John
    Customer Name after Update : Jack2
    					

Properti

ID Artikel: 308510 - Kajian Terakhir: 24 September 2011 - Revisi: 2.0
Berlaku bagi:
  • Microsoft ADO.NET 1.1
  • Microsoft Visual C++ .NET 2002 Standard Edition
  • Microsoft Visual C++ .NET 2003 Standard Edition
Kata kunci: 
kbhowtomaster kbsqlclient kbsystemdata kbmt KB308510 KbMtid
Penerjemahan Mesin
PENTING: Artikel ini diterjemahkan menggunakan perangkat lunak mesin penerjemah Microsoft dan bukan oleh seorang penerjemah. Microsoft menawarkan artikel yang diterjemahkan oleh seorang penerjemah maupun artikel yang diterjemahkan menggunakan mesin sehingga Anda akan memiliki akses ke seluruh artikel baru yang diterbitkan di Pangkalan Pengetahuan (Knowledge Base) dalam bahasa yang Anda gunakan. Namun, artikel yang diterjemahkan menggunakan mesin tidak selalu sempurna. Artikel tersebut mungkin memiliki kesalahan kosa kata, sintaksis, atau tata bahasa, hampir sama seperti orang asing yang berbicara dalam bahasa Anda. Microsoft tidak bertanggung jawab terhadap akurasi, kesalahan atau kerusakan yang disebabkan karena kesalahan penerjemahan konten atau penggunaannya oleh para pelanggan. Microsoft juga sering memperbarui perangkat lunak mesin penerjemah.
Klik disini untuk melihat versi Inggris dari artikel ini:308510

Berikan Masukan

 

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