Visual Studio và Data Access – Phần 2

Bây giờ chúng ta đã tạo một ứng dụng mà có thể chọn dữ liệu từ cơ sở dữ

liệu, chúng ta sẽ học cách để khôi phục cơ sở dữ liệu. Nếu bạn làm theo vài

bước sau cùng bạn sẽ có một ứng dụng chứa sự kết nối, adapter dữ liệu và

đối tượng DataSet. Tất cả bị bỏ qua việc móc DataSet vào một DataGrid,

thêm vài tính logic để khôi phục dữ liệu từ cơ sở dữ liệu và hiện nó, sau đó

tạo sự thay đổi trở lại cơ sở dữ liệu.

pdf15 trang | Chuyên mục: Visual C# | Chia sẻ: dkS00TYs | Lượt xem: 1874 | Lượt tải: 2download
Tóm tắt nội dung Visual Studio và Data Access – Phần 2, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
Viewing .NET Data 
Visual Studio và Data Access – Phần 2 
Cập nhật nguồn dữ liệu 
Bây giờ chúng ta đã tạo một ứng dụng mà có thể chọn dữ liệu từ cơ sở dữ 
liệu, chúng ta sẽ học cách để khôi phục cơ sở dữ liệu. Nếu bạn làm theo vài 
bước sau cùng bạn sẽ có một ứng dụng chứa sự kết nối, adapter dữ liệu và 
đối tượng DataSet. Tất cả bị bỏ qua việc móc DataSet vào một DataGrid, 
thêm vài tính logic để khôi phục dữ liệu từ cơ sở dữ liệu và hiện nó, sau đó 
tạo sự thay đổi trở lại cơ sở dữ liệu. 
Chúng ta cài đặt một form như bên dưới và sau đó tìm hiểu đoạn mã của ứng 
dụng , nó nằm trong thư mục 10_UpdatingData: 
 Form bao gồm một control DataGrid và hai nút. Khi người dùng click vào 
nut Retrive thì đoạn mã sau sẽ chạy: 
private void retrieveButton_Click(object sender, System.EventArgs e) 
{ 
 sqlDataAdapter1.Fill (customerDataSet , "Customer") ; 
 dataGrid1.SetDataBinding (customerDataSet , "Customer") ; 
} 
Đoạn mã này dùng adapter dữ liệu được tạo ra dễ dàng hơn để điền một 
DataSet. Chúng ta điền vào bảng dữ liệu Customer với tất cả mẫu tin từ cơ 
sở dữ liệu. Việc gọi phương thức SetDataBinding() sẽ hiển thị những mẫu 
tin này trên màn hình. 
Sau khi điều khiển các dữ liệu và tạo một số thay đổi bạn có thể click vào 
nút Update. Đoạn mã sau được hiện tiếp theo: 
private void updateButton_Click(object sender, System.EventArgs e) 
{ 
 sqlDataAdapter1.Update(customerDataSet , "Customer" ) ; 
} 
Đoạn mã này cũng rất đơn giản, như adapter dữ liệu đang làm mọi công 
việc. Phương thức Update() lập qua dữ liệu trong bảng chọn của DataSet, và 
cho một sự thay đổi sẽ thực thi các statement SQL chống lại cơ sở dữ liệu. 
Chú ý rằng phương thức này trả về một kiểu int là số lượng hàng được chỉnh 
sửa. 
Công dụng của adapter dữ liệu được bàn luận chi tiết trong chương trước, 
nhưng nhắc lại một tý, nó tượng trưng cho các SQL statement như các tác 
vụ SELECT, INSERT, UPDATE, và DELETE. Khi phương thức Update() 
được gọi, nó thực thi các statement thích hợp cho mọi hàng chỉnh sửa. Nó là 
nguyên nhân của tất cả hàng chỉnh sửa thực thi một statement UPDATE, tất 
cả hàng bị xoá phát ra một statement DELETE, và vân vân. 
Nếu bạn muốn có tất cả lợi ích của việc dùng các thủ tục lưu trữ, nhưng 
không có thời gian hay kiến thức để viết. Có một cách dễ dàng hơn trong 
Visual studio.NET. Hiển thị một menu ngữ cảnh cho adapter dữ liệu và chọn 
menu Configure Data Adapter. Nó sẽ hiện một trình thông minh để chọn 
nguồn của dữ liệu cho adapter. 
Sau khi chọn tạo một thủ tục lưu trữ mới. Click Next để tiến trình tự động 
tạo mới các thủ tục cho các statement SELECT, INSERT, UPDATE, và 
DELETE. Và sửa đổi mã bên trong dự án để gọi các thủ tục lưu trữ này thay 
cho việc gọi các SQL statements. 
Ngoài việc tạo các thủ tục lưu trữ mới, bạn có thể chọn các thủ tục lưu trữ 
đang tồn tại để phổ biến bốn lệnh SQL trên adapter. Nó sẽ có lợi khi hand - 
crafted các thủ tục lưu trữ hay khi một vài chức năng khác đựơc biểu diễn 
bởi một thủ tục như là thay đổi kiểm toán hay cập nhật liên kết các mẫu tin. 
Xây dựng một lược đồ 
Chúng ta mất vài trang để xây dựng một lược đồ XSD bằng tay nhưng đó 
không phải là cách duy nhất để làm. Visual studio bao gồm một editor để tạo 
lược đồ XSD - từ menu Project chọn Add New Item sau đó chọn mục XML 
Schema từ category Data và gọi TestSchema.xsd. 
Nó thêm hai tập tin mới vào dự án của bạn - tập tin .xsd và một tập tin .xsx. 
Để tạo một tập hợp tương ứng của mã cho lược đồ ta chọn Generate Dataset 
từ menu Schema như bên dưới: 
 Chọn tuỳ chọn này sẽ thêm một tập tin C# vào dự án, dựa án sẽ hiện lên tập 
tin XSD trong Solution Explorer. Tập tin này được tự động tạo ra bất cứ khi 
nào có sự thay đổi trong lược đồ XSD và không nên chỉnh sửa bằng tay; nó 
được tạo như ở chương trước với công cụ XSD.EXE. 
Nếu click từ cửa sổ xem Schema đến cửa sổ xem XML, bạn sẽ thấy các mẫu 
lược đồ: 
<xs:schema id="TestSchema" 
 targetNamespace="" 
 elementFormDefault="qualified" 
 xmlns="" 
 xmlns:mstns="" 
 xmlns:xs=""> 
XSD này tạo ra đoạn mã bên dưới trong tập tin TestSchema.cs. Trong đoạn 
mã bên dưới, tôi đã bỏ qua phần thân của phương thức và định dạng để đọc 
dễ dàng hơn. 
using System; 
using System.Data; 
using System.Xml; 
using System.Runtime.Serialization; 
[Serializable()] 
[System.ComponentModel.DesignerCategoryAttribute("code")] 
[System.Diagnostics.DebuggerStepThrough()] 
[System.ComponentModel.ToolboxItem(true)] 
public class TestSchema : DataSet 
{ 
 public TestSchema() { ... } 
 protected TestSchema(SerializationInfo info, StreamingContext context) 
 { ... } 
 public override DataSet Clone() { ... } 
 protected override bool ShouldSerializeTables() { ... } 
 protected override bool ShouldSerializeRelations() { ... } 
 protected override void ReadXmlSerializable(XmlReader reader) { ... } 
 protected override System.Xml.Schema.XmlSchema 
GetSchemaSerializable() 
 { ... } 
 internal void InitVars() { ... } 
 private void InitClass() { ... } 
 private void SchemaChanged(object sender, 
 System.ComponentModel.CollectionChangeEventArgs e) 
 { ... } 
} 
Thêm một yếu tố 
Đều đầu tiên để làm là thêm một phần tử cấp cao mới. Click phải trên 
workspace và chọn add/New Element: 
Nó sẽ tạo ra một phần tử mới không có tên trên màn hình. Bạn nên gõ tên 
cho phần tử này. Trong ví dụ này chúng ta sẽ dùng Product. Và ta cũng 
thêm vài attribute cho phần tử: 
Khi bạn lưu tập tin XSD, tập tin C# sẽ được sửa đổi và một số lượng lớp 
mới được tạo. Chúng ta sẽ bàn luận những khía cạnh thích hợp nhất của 
đoạn mã được tạo trong tập tin này, TestSchema.cs: 
public class TestSchema : DataSet 
{ 
 private ProductDataTable tableProduct; 
 [System.ComponentModel.DesignerSerializationVisibilityAttribute 
 (System.ComponentModel.DesignerSerializationVisibility.Content)] 
 public ProductDataTable Product 
 { 
 get 
 { 
 return this.tableProduct; 
 } 
 } 
} 
Một biến thành viên mới của lớp ProductDataTable được tạo. Đối tượng 
này được trả về bởi thuộc tính Product, và được xây dựng trong phương 
thức cập nhật InitClass(). Từ phần nhỏ này của đoạn mã chứng minh rằng 
người dùng của những lớp này có thể xây dựng một DataSet từ lớp trong tập 
tin này, và sử dụng DataSet.Procducts để trả về products DataTable. 
Tạo DataTable 
Đoạn mã bên dưới được tạo cho DataTable mà được thêm vào mẫu lược 
đồ: 
public delegate void ProductRowChangeEventHandler 
 (object sender, ProductRowChangeEvent e); 
public class ProductDataTable : DataTable, System.Collections.IEnumerable 
{ 
 internal ProductDataTable() : base("Product") 
 { 
 this.InitClass(); 
 } 
 [System.ComponentModel.Browsable(false)] 
 public int Count 
 { 
 get { return this.Rows.Count;} 
 } 
 public ProductRow this[int index] 
 { 
 get { return ((ProductRow)(this.Rows[index]));} 
 } 
 public event ProductRowChangeEventHandler ProductRowChanged; 
 public event ProductRowChangeEventHandler ProductRowChanging; 
 public event ProductRowChangeEventHandler ProductRowDeleted; 
 public event ProductRowChangeEventHandler ProductRowDeleting; 
Lớp ProductDataTable được thừa hưởng từ DataTable, và bao gồm một sự 
thực thi của giao diện IEnumerable. Bốn sự kiện được định nghĩa là sử dụng 
delegate được định nghĩa trên lớp khi được gọi lên. Delegate này được 
truyền qua một thể hiện của lớp ProductRowChangeEvent, đựơc định nghĩa 
lại bởi Visual studio.NET. 
Đoạn mã đựơc tạo bao gồm một lớp thừa hưởng từ DataRow, cho phép truy 
cập đến các cột bên trong bảng. Bạn có thể tạo một hàng mới theo một trong 
hai cách sau: 
 Gọi phương thức NewRow() để trả về một thể hiện mới của lớp Row. 
truyền hàng mới này đến phương thức Rows.Add() 
 Gọi phương thức Rows.Add() và truyền một mảng đối tượng, một cho 
mọi hàng trong bảng. 
Phương thức AddProductRow() được trình bày bên dưới: 
public void AddProductRow(ProductRow row) 
{ 
 this.Rows.Add(row); 
} 
public ProductRow AddProductRow ( ... ) 
{ 
 ProductRow rowProductRow = ((ProductRow)(this.NewRow())); 
 rowProductRow.ItemArray = new Object[0]; 
 this.Rows.Add(rowProductRow); 
 return rowProductRow; 
} 
Từ đoạn mã, phương thức thứ hai không chỉ tạo một hàng mới, nó sau đó 
chèn hàng đó vào tập hợp Rows của DataTable, và sau đó trả về đối tượng 
này cho người gọi. 

File đính kèm:

  • pdf93_4771.pdf