Bạn hiện đang ngoại tuyến, hãy chờ internet để kết nối lại

Làm thế nào để cập nhật cơ sở dữ liệu SQL Server bằng cách sử dụng các đối tượng SqlDataAdapter trong Visual C#.NET

QUAN TRỌNG: Bài viết này được dịch bằng phần mềm dịch máy của Microsoft chứ không phải do con người dịch. Microsoft cung cấp các bài viết do con người dịch và cả các bài viết do máy dịch để bạn có thể truy cập vào tất cả các bài viết trong Cơ sở Kiến thức của chúng tôi bằng ngôn ngữ của bạn. Tuy nhiên, bài viết do máy dịch không phải lúc nào cũng hoàn hảo. Loại bài viết này có thể chứa các sai sót về từ vựng, cú pháp hoặc ngữ pháp, giống như một người nước ngoài có thể mắc sai sót khi nói ngôn ngữ của bạn. Microsoft không chịu trách nhiệm về bất kỳ sự thiếu chính xác, sai sót hoặc thiệt hại nào do việc dịch sai nội dung hoặc do hoạt động sử dụng của khách hàng gây ra. Microsoft cũng thường xuyên cập nhật phần mềm dịch máy này.

Nhấp chuột vào đây để xem bản tiếng Anh của bài viết này:308507
Đối với một Microsoft Visual Basic.NET Phiên bản của bài viết này, xem 308055.
Đối với một Microsoft Visual J#.NET Phiên bản của bài viết này, xem 320633.

TRONG TÁC VỤ NÀY

TÓM TẮT
Bài viết này chứa Microsoft Visual C#.Mẫu NET mã chứng minh làm thế nào để sử dụng các SqlDataAdapter đối tượng để cập nhật cơ sở dữ liệu SQL Server với sửa đổi dữ liệu đang chạy trên một Số liệu đối tượng là dân cư với dữ liệu từ một bảng trong cơ sở dữ liệu.

back to the top

Yêu cầu

Danh sách sau vạch ra được đề nghị phần cứng, phần mềm, cơ sở hạ tầng mạng, kỹ năng và kiến thức, và gói dịch vụ được yêu cầu:
  • Microsoft Windows 2000 Professional, Windows 2000 Server, Windows 2000 Advanced Server, hoặc máy chủ Windows NT 4.0
  • Microsoft Visual Studio.NET
  • Microsoft Visual C#.NET
  • Microsoft SQL Server Phiên bản 7.0 hoặc cao hơn
Bài viết này giả định rằng bạn đã quen thuộc với các chủ đề sau:
  • Visual C#.NET
  • ADO.Nguyên tắc cơ bản NET và cú pháp
back to the top

Mô tả kỹ thuật

Các SqlDataAdapter đối tượng phục vụ như một cầu nối giữa một ADO.NET Số liệu đối tượng và cơ sở dữ liệu SQL Server. SqlDataAdapter là một đối tượng trung gian populates một ADO.NET Số liệu đối tượng với dữ liệu đó Lấy từ cơ sở dữ liệu SQL Server, sau đó Cập Nhật cơ sở dữ liệu để phản ánh những thay đổi (chẳng hạn như chèn, Cập Nhật và xoá) được thực hiện cho dữ liệu bằng cách sử dụng các Số liệu đối tượng.

Các InsertCommand, các UpdateCommand, và các DeleteCommand thuộc tính của các SqlDataAdapter đối tượng Cập Nhật cơ sở dữ liệu với những sửa đổi dữ liệu đang chạy trên một Số liệu đối tượng. Các đặc tính này SqlCommand các đối tượng mà chỉ định CHÈN, Cập Nhật và các lệnh DELETE Transact-SQL được sử dụng để gửi các sửa đổi tập dữ liệu cơ sở dữ liệu mục tiêu. Các SqlCommand các đối tượng đang được chỉ định cho các thuộc tính này có thể được tạo bằng tay trong mã hoặc tự động tạo ra bằng cách sử dụng các SqlCommandBuilder đối tượng.

Mẫu mã đầu tiên trong bài viết này chứng tỏ làm thế nào để sử dụng các SqlCommandBuilder đối tượng để tự động tạo ra các UpdateCommand tài sản của các SqlDataAdapter đối tượng. Mẫu thứ 2 sử dụng một kịch bản mà bạn không thể sử dụng lệnh tự động thế hệ. Mẫu thứ hai chứng tỏ làm thế nào để tự tạo và sử dụng một SqlCommand đối tượng là các UpdateCommand tài sản của một SqlDataAdapter đối tượng.

back to the top

Tạo mẫu SQL Server bảng

Để tạo một bảng SQL Server mẫu mà bạn có thể sử dụng trong các Visual C#.Mẫu NET mã đã được diễn tả trong bài viết này, hãy làm theo các bước sau:
  1. Mở SQL Query Analyzer, và sau đó kết nối cơ sở dữ liệu mà bạn muốn tạo ra bảng mẫu. Bài viết mẫu mã ở đây sử dụng các Northwind cơ sở dữ liệu được bao gồm với Microsoft SQL Server.
  2. Để tạo ra một bảng mẫu được đặt tên theo CustTest và chèn một bản ghi vào bảng, chạy câu Transact-SQL sau đây:
    Create Table CustTest( CustID int primary key, CustName varchar(20))Insert into CustTest values(1,'John')					
back to the top

Mẫu mã 1: Tự động tạo ra lệnh

Nếu những tuyên bố chọn mà bạn sử dụng để lấy dữ liệu populates một Số liệu dựa trên một bảng cơ sở dữ liệu duy nhất, bạn có thể sử dụng các CommandBuilder đối tượng để tự động tạo ra các DeleteCommand, các InsertCommand, và các UpdateCommand thuộc tính của các DataAdapter. Điều này giúp đơn giản hoá và làm giảm mã đó là cần thiết để thực hiện hoạt động CHÈN, UDPATE và xóa.

Như một yêu cầu tối thiểu, bạn phải thiết lập các SelectCommand bất động sản để tự động tạo ra lệnh. Giản đồ bảng mà các SelectCommand truy xác cú pháp CHÈN, Cập Nhật và báo cáo xóa tự động tạo ra.

Các SelectCommand bất động sản cũng phải trở lại ít nhất một khóa chính hoặc cột duy nhất. Nếu không có là hiện nay, một ngoại lệ InvalidOperation được tạo ra và các lệnh không được tạo ra.

Để tạo ra một mẫu Visual C#.Ứng dụng giao diện điều khiển NET chứng tỏ làm thế nào để sử dụng các SqlCommandBuilder đối tượng để tự động tạo ra các DeleteCommand, các InsertCommand, và các UpdateCommand thuộc tính của các SqlCommand đối tượng cho một SqlDataAdapter đối tượng, hãy làm theo các bước sau:
  1. Để tạo ra một mới Visual C#.NET ứng dụng giao diện điều khiển, hãy làm theo các bước sau:
    1. Bắt đầu Microsoft Visual Studio.NET.
    2. Trên các Tệp trình đơn, điểm đến Mới, sau đó bấm Dự án.
    3. Nhấp vào Visual C# Project dưới Các loại dự án, sau đó bấm Giao diện điều khiển ứng dụng dưới Khuôn mẫu.
  2. Thay thế nội dung mặc định của Class1 với đoạn mã sau:
    using System.Data;using System.Data.SqlClient;using System;namespace Q308507 {  class Class1 {     static void Main(string[] args)	{          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.        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 running 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.        Console.WriteLine("Customer Name before Update : " + CustomersDataSet.Tables["Customers"].Rows[0]["CustName"]);        //Modify the value of the CustName field.        CustomersDataSet.Tables["Customers"].Rows[0]["CustName"] = "Jack";        //Post the data modification to the database.        da.Update(CustomersDataSet, "Customers");                Console.WriteLine("Customer Name updated successfully");        //Close the database connection.        cn.Close();        //Pause        Console.ReadLine();      }   }}
  3. Sửa đổi các chuỗi kết nối như là thích hợp cho môi trường của bạn.
  4. Lưu và sau đó chạy các ứng dụng. Nhận thấy rằng một cửa sổ giao diện điều khiển sẽ mở ra và sau đó sẽ hiển thị đầu ra sau đây:
    Update command Generated by the Command Builder : ==================================================UPDATE CustTest SET CustID = @p1 , CustName = @p2 WHERE ( CustID = @p3 AND CustName = @p4 )         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 = @p2 )         Customer Name before Update : JohnCustomer Name updated successfully						
  5. Bấm phím bất kỳ để bỏ qua cửa sổ giao diện điều khiển và để ngăn chặn các ứng dụng.
back to the top

Mẫu mã 2: Tự tạo và khởi tạo các tài sản UpdateCommand

Sản lượng mà tạo ra các mã mẫu 1 chỉ ra rằng logic để tạo ra lệnh tự động để cập nhật báo cáo được dựa trên concurrency lạc quan. Đó là, hồ sơ không bị khóa để chỉnh sửa, và người dùng hoặc quy trình khác có thể sửa đổi bản ghi bất cứ khi nào.

Bởi vì một hồ sơ có thể sửa đổi sau khi nó được trả lại từ bản tuyên bố chọn nhưng trước khi Cập Nhật tuyên bố được ban hành, tuyên bố bản cập nhật tự động tạo ra chứa một WHERE khoản do đó một hàng được Cập Nhật chỉ nếu nó có chứa tất cả các giá trị ban đầu. Điều này là để tránh ghi đè dữ liệu mới. Nếu một tuyên bố bản cập nhật tự động tạo ra cố gắng để cập nhật một hàng mà đã bị xóa hoặc không chứa các giá trị ban đầu được tìm thấy trong các Số liệu, lệnh không ảnh hưởng đến bất kỳ hồ sơ, và một ngoại lệ DBConcurrencyException được tạo ra. Để thử nghiệm này với mã trong mã mẫu 1, chạy mã trong Visual Studio Debugger, đặt một breakpoint sau khi các Số liệu đã được lấp đầy nhưng trước khi cơ sở dữ liệu được Cập Nhật, và sau đó xóa một hàng trong bảng từ SQL Query Analyzer. Các Cập nhật gọi sau đó ném ngoại lệ.

Nếu bạn muốn báo cáo Cập Nhật để hoàn thành bất kể các giá trị ban đầu, bạn phải thiết đặt tường minh các UpdateCommand Đối với các DataAdapter và không dựa vào lệnh tự động thế hệ.

Tự tạo và khởi tạo các UpdateCommand tài sản của các SqlDataAdapter đối tượng được sử dụng trong mã mẫu 1, làm theo các bước sau:
  1. Thay thế mã hiện có trong các Chính chức năng Class1 trong các Visual C#.Ứng dụng giao diện điều khiển NET bạn đã tạo ở các Mẫu mã 1: Tự động tạo ra lệnh phần với đoạn mã sau:
    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 UpdateCommand for the DataAdapter.//Note 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["@pCustName"].SourceVersion = DataRowVersion.Current;DAUpdateCmd.Parameters["@pCustName"].SourceColumn = "CustName";DAUpdateCmd.Parameters.Add(new SqlParameter("@pCustId", SqlDbType.Int));DAUpdateCmd.Parameters["@pCustId"].SourceVersion = DataRowVersion.Original;DAUpdateCmd.Parameters["@pCustId"].SourceColumn = "CustId";//Assign the SqlCommand to the UpdateCommand property of the SqlDataAdapter.da.UpdateCommand = DAUpdateCmd;        da.Fill(CustomersDataSet, "Customers");        Console.WriteLine("Customer Name before Update : " + CustomersDataSet.Tables["Customers"].Rows[0]["CustName"]);CustomersDataSet.Tables["Customers"].Rows[0]["CustName"] = "Jack";da.Update(CustomersDataSet, "Customers");        Console.WriteLine("Customer Name updated successfully");cn.Close();Console.ReadLine();					
  2. Sửa đổi các chuỗi kết nối như là thích hợp cho môi trường của bạn.
  3. Lặp lại các bước 1 thông qua 4 trong các Mẫu mã 1: Tự động tạo ra lệnh keá tieáp. Lưu ý rằng một ngoại lệ DBConcurrencyException không còn được tạo ra.
back to the top

Cảnh báo: Bài viết này được dịch tự động

Thuộc tính

ID Bài viết: 308507 - Xem lại Lần cuối: 08/27/2011 19:26:00 - Bản sửa đổi: 2.0

Microsoft ADO.NET 1.1, Microsoft Visual C# .NET 2002 Standard Edition, Microsoft Visual C# .NET 2003 Standard Edition

  • kbhowtomaster kbsqlclient kbsystemdata kbmt KB308507 KbMtvi
Phản hồi
ript> /html>