Trước tiênn bạn đã định nghĩa sơ đồ của bộ dữ liệu của bạn,
với đầy đủ các DataTable, DataColumn, Constraint, và những gì
cần thiết, bạn nên tạo DataSet v̕i một vài thông tin bổ
sung. Có hai cách chính để đọc dữ liệu từ một nguồn bên ngoài và chèn nó vào
DataSet:
-
Dùng trình cung cấp dữ liệu
-
Đọc XML vào trong DataSet
Tạo một DataSet dùng một DataAdapter
Đoạn mã về dòng dữ liệu được giới thiệu trong lớp SqlDataAdapter, được trình bày như sau:
string select = "SELECT ContactName,CompanyName FROM Customers"; SqlConnection conn = new SqlConnection(source); SqlDataAdapter da = new SqlDataAdapter(select , conn); DataSet ds = new DataSet(); da.Fill(ds , "Customers");
Hai dòng in đậm chỉ ra cách dùng của SqlDataAdapter – OleDbDataAdapter
cũng có nhưng tính năng ảo giống như Sql
equivalent.
SqlDataAdapter và OleDbDataAdapter là hai lớp xuất phát từ một lớp cơ bản chứ
không phải là một bộ các giao diện, và nhất là các lớp SqlClient- hoặc OleDb. Cây kế thưa
được biểu diễn như sau:
System.Data.Common.DataAdapter System.Data.Common.DbDataAdapter System.Data.OleDb.OleDbDataAdapter System.Data.SqlClient.SqlDataAdapter
Trong quá trình lấy dữ liệu từ một DataSet, cần phải có một vài lệnh được dùng để chọn dữ liệu.
Nó có thể là một câu lệnh SELECT, một stored procedure,
hoặc OLE DB provider, một TableDirect command. Ví dụ
trên sử dụng một trong những cấu trúc sẵn có trong SqlDataAdapter để truyền câu lệnh SELECT vào một SqlCommand, và phát
nó khi gọi phương thức Fill() trên adapter.
Trở lại với các ví dụ về stored procedures trong chương trước, Tôi
đã định nghĩa các stored procedure INSERT, UPDATE, và DELETE, nhưng chưa đưa ra
một procedure để SELECT dữ liệu. Chúng ta sẽ lấp lỗ
hổng này trong phần sau, và chỉ ra cách làm sao để gọi một stored procedure từ
một SqlDataAdapter để tạo dữ liệu cho một DataSet.
Sử dụng một Stored Procedure trong một DataAdapter
Trước tiên chúng ta cần định nghĩa một stored procedure và
cài nó vào cơ sở dữ liệu database. Mã cho ví dụ này sẵn có trong thư mục 11_DataAdapter. Stored procedure đẻ SELECT dữ liệu như sau:
CREATE PROCEDURE RegionSelect AS SET NOCOUNT OFF SELECT * FROM Region GO
Ví dụ này tương đối đơn giản nó thật không xứng tầm với một stored
procedure, chỉ là một câu lệnh SQL đơn giản. Stored procedure này có thể đánh
vào SQL Server Query Analyzer, hoặc bạn có thể chạy file StoredProc.sql để sử dụng ví dụ này.
Tiếp theo, chúng ta cần định nghĩa một SqlCommand để thực thi stored procedure này. Một lần nữa mã
rất đơn giản, và hầu hết đã được đưa ra trong các phần trên:
private static SqlCommand GenerateSelectCommand(SqlConnection conn ) { SqlCommand aCommand = new SqlCommand("RegionSelect" , conn); aCommand.CommandType = CommandType.StoredProcedure; aCommand.UpdatedRowSource = UpdateRowSource.None; return aCommand; }
Phương thức này phát ra SqlCommand để gọi
thủ tục RegionSelect khi thực thi. Và cuối cùng là móc
nói nó với một SqlDataAdapter thông qua lời gọi phương
thức Fill():
DataSet ds = new DataSet(); // Create a data adapter to fill the DataSet SqlDataAdapter da = new SqlDataAdapter(); // Set the data adapter's select command da.SelectCommand = GenerateSelectCommand (conn); da.Fill(ds , "Region");
Ở đây tôi tạo một SqlDataAdapter mới, xem
SqlCommand được phát ra thông qua thuộc tính SelectCommand của data adapter, và gọi Fill(), để thực thi stored procedure và chèn tất cả các dòng
vào the Region DataTable.
Tạo một DataSet từ XML
Ngoài việc tạo sơ đồ cho mọt DataSet và các bảng tương ứng, một DataSet có thể đọc và ghi các dữ liệu bẩm sinh XML, giống như
một file trên đĩa, một stream, hoặc một text reader.
Để load XML vào một DataSet, đơn giản gọi
một trong những phương thức ReadXML(), chẳng hạn như mã
sau, dùng để đọc từ một file trên đĩa:
DataSet ds = new DataSet(); ds.ReadXml(".\\MyData.xml");