intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Lập trình ứng dụng trên Pocket PC - ADO.NET trên.NET Compact Framework - Nguyễn Tuấn Anh

Chia sẻ: Nguyen Quan | Ngày: | Loại File: PDF | Số trang:9

75
lượt xem
5
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

ADO.NET là tên chỉ một tập hợp các lớp truy cập cơ sở dữ liệu trong giới lập trình .NET. Tập hợp các lớp trong ADO.NET rất nhiều. Tuy nhiên, thao tác dữ liệu đơn giản và kết nối dữ liệu từ xa có thể thao tác được chỉ với một vài dòng lệnh. Trong phần này chúng ta tìm hiểu cách thức thao tác với dữ liệu cục bộ trên thiết bị.

Chủ đề:
Lưu

Nội dung Text: Lập trình ứng dụng trên Pocket PC - ADO.NET trên.NET Compact Framework - Nguyễn Tuấn Anh

  1. Thu vien Hoc Lieu Mo Viet Nam module: m46821 1 ADO.NET tr[U+FFFD]NET Compact Framework∗ Nguy n Tu n Anh This work is produced by Thu vien Hoc Lieu Mo Viet Nam and licensed under the Creative Commons Attribution License † Tóm t t n i dung ADO.NET trên .NET Compact Framework 1 Gi i thi u ADO.NET ADO.NET là tên ch m t t p h p các l p truy c p cơ s d li u trong gi i l p trình .NET. T p h p các l p trong ADO.NET r t nhi u. Tuy nhiên, thao tác d li u đơn gi n và k t n i d li u t xa có th thao tác đư c ch v i m t vài dòng l nh. Trong ph n này chúng ta tìm hi u cách th c thao tác v i d li u c c b trên thi t b . 2 Lưu tr d li u b ng DataSet DataSet là các l p framework cơ b n đ thao tác d li u cùng v i .NET Compact Framework. DataSet có th coi như là b máy cơ s d li u quan h trong chính nó. Nó lưu d các b ng trong b nh đư c s p x p như là các b ng, dòng, và c t và cho phép ngư i phát tri n th c hi n các thao tác cơ s d li u chu n, như thêm và xóa d li u, s p x p, và ki m tra ràng bu c. Các nhà phát tri n là nh ng ngư i hi u làm th nào đ làm vi c có hi u qu v i DataSet trên .NET Compact Framework s ghi hi u qu các ng d ng ADO.NET trên framework. Đ thao tác d li u trong l p tình ADO.NET đư c đ vào DataSet t CSDL l n, làm vi c v i các khoang d li u trong DataSet, và ghi d li u thay đ i tr l i CSDL. Trong ph n này chúng ta tìm hi u làm th nào đ đ d li u vào DataSet b ng cách trèn d li u chương trình và th c hi n thao tác đơn gi n trên d li u. 2.1 Bên trong DataSet: DataTables, DataRows, và DataColumns DataSet ch a m t ho c nhi u DataTables. M i DataTables tương ng v i m t b ng trong CSDL quan h . Nó có m t t p h p các DataRows, và m t DataRow có m t t p h p DataColumns trên th c t lưu tr d li u. Đ t o DataSet, DataTables, và DataColumns r t đơn gi n. Hình 4.1 mô hình ki n trúc t ng quan cách m t DataSet lưu tr d li u đơn gi n phonebook. ∗ Version 1.1: Jan 18, 2011 12:37 pm GMT+7 † http://creativecommons.org/licenses/by/3.0/ http://voer.vn/content/m46821/1.1/
  2. Thu vien Hoc Lieu Mo Viet Nam module: m46821 2 Hình 1: Miêu t DataSet c u trúc c a phone book. http://voer.vn/content/m46821/1.1/
  3. Thu vien Hoc Lieu Mo Viet Nam module: m46821 3 Chúng ta có th s d ng riêng m t DataTable đ lưu tr d li u liên quan cùng v i m t b ng, nhưng DataSet cung c p các phương th c và thu c tính có ti n ích thêm và th c s t o m t CSDL quan h thu nh trong b nh . Ví d , cùng v i DataSet chúng ta có thê làm vi c t t c các cái sau: [U+F0B7] Thao tác v i thông tin bên trong m t DataSet như là m t CSDL quan h nh . Ví d , chúng ta có th thi t l p m i quan h cha con, c p nh t, xóa, và t o c t d li u đư c tính toán t các trư ng d li u khác [U+F0B7] Ghi và l p n i dung c a t t c DataTables vào m t file XML cùng v i ch m t dòng l nh. [U+F0B7] Thông qua b máy SQL CE, b máy này s giúp chúng ta đưa vào nó các b ng t CSDL quan h đư c lưu tr trên thi t b ho c thay th b ng d li u t máy ch xa. [U+F0B7] Thông qua nó SQL cung c p đư c đưa vào các b ng t máy ch xa. [U+F0B7] Nh n m t ph n c a DataSet, cái mà tr v giá tr c a d ch v Web, ho c thông qua DataSet tr l i d ch v Web. Trong ph n này chúng ta s tìm hi u cách thao tác d li u trên DataSet. 2.2 Đưa d li u vào DataSet Đ đưa d li u vào m t DataSet, chúng ta làm theo các bư c sau: Bư c1: Nh n m t thao tác DataTable v i DataSet mà chúng ta mu n thêm m t dòng m i vào. N u c n thi t, t o m t DataTable m i. T p h p các DataTables mà DataSet qu n lý có th đư c s d ng thông qua thu c tính DataSet.Tables. N u chúng ta ph i t o m t DataTable m i và thêm nó vào t p h p DataSet.Table, sao đó thông thư ng chúng ta thêm d li u vào b ng đã t n t i, vì v y chúng ta có th b qua các bư c này: T o m t DataTable thông qua c u trúc DataTable. T o m t DataColumns và thêm vào nó t p h p DataTable.Columns. M i DataColumn, chúng ta ph i ch ra tên, ki u d li u c a c t. Thêm DataTable vào t p h p DataSet.Tables b ng cách g i phương th c .Add. Bư c 2: T o m t DataRow. Ví d , t o m t dòng m i cho DataTable đ u tiên trong DataSet: S d ng l_newRow = l_DataSet. Tables[0].NewRow. Chúng ta có th ch ra ra b ng thông qua tên b ng: Ví d _newRow = l_DataSet.Tables["Customers"].NewRow Bư c 3: DataRow m i t đ ng đư c t o cùng v i các c t vào tương ng v i b ng đã đư c t o. Trèn giá tr vào các c t c a DataRow. Bư c 4: Thêm DataRow m i vào t p h p Rows c a DataTable đã đư c t o: Ví d _DataSet.Tables[0].Rows.Add(l_newRow);. Bư c5: Sau khi chúng ta đã thêm vào t t c các dòng như mong mu n, g i phương th c DataSet.AcceptChanges đ đ ng ý t t c s thay đ i. Đ h y b t t c vi c thêm m i d li u chúng ta g i phương th c DataSet.RejectChanges. 2.3 Xây d ng m t DataSet lưu tr m t Phone Book Đ mô t cách t o m t DataSet có kh năng lưu tr d li u quan h , chúng ta hãy xem xét ví d ng d ng PhoneBook. Trong ng d ng ví d này, chúng ta hãy xem xét kh năng c a m t DataSet lưu tr phone book. DataSet lưu tr m t b ng DataTable, b ng này đư c thi t l p g m hai DataColumns, c t th nh t lưu tr tên và c t th hai lưu tr s đi n tho i. Đo n mã sau mô t năm bư c c n thi t đ thêm d li u vào m t DataSet, bao g m t o m t b ng m i. Listing 4.1 T o và lưu tr m t DataSet DataSetl_DataSet = new DataSet(); // Create a DataTable that holds a "Name" and a "PhoneNumber" DataTablel_newTable = new DataTable("Phone Contacts"); l_newTable.Columns.Add(new DataColumn("Name", typeof(System.String))); l_newTable.Columns.Add(new DataColumn("PhoneNumber", typeof(System.String))); http://voer.vn/content/m46821/1.1/
  4. Thu vien Hoc Lieu Mo Viet Nam module: m46821 4 // Add the DataTable to the DataSet’s table collection l_DataSet.Tables.Add(l_newTable); // Now put a few names in... // GEORGE WASHINGTON DataRow l_newRow = l_DataSet.Tables[0].NewRow(); l_newRow[0] = "George Washington"; l_newRow[1] = "555 340-1776"; l_DataSet.Tables[0].Rows.Add(l_newRow); // BEN FRANKLIN l_newRow = l_DataSet.Tables[0].NewRow(); l_newRow["Name"] = "Ben Franklin"; l_newRow["PhoneNumber"] = "555 336-3211"; l_DataSet.Tables[0].Rows.Add(l_newRow); // Commit the changes l_DataSet.AcceptChanges(); 2.4 Trích d li u t m t DataSet Trích d li u t m t DataSet như là truy nh p DataTable trong t p h p DataSet.Tables và tìm ki m dòng mong mu n trong b ng. M i dòng có m t ch s , t o cho nó d dàng truy c p c t mong mu n. Ch s đ u tiên là 0, như trong ví d : l_DataSet.Tables[0].Rows[0][0] Truy nh p c t đ u ti n trong dòng đ u tiên c a DataTable đ u tiên. l_DataSet.Tables[0].Rows[0][9] truy nh p c t th 10 trong dòng đ u tiên c a DataTable đ u ti n. l_DataSet.Tables[0].Rows[29][9] Truy nh p c t th 10 trong dòng 30 c a DataTable đ u ti n. Trích d l i u PhoneBook t m t DataSet Sau đây là đo n mã trong ng d ng ví d PhoneBook. Nó tìm ki m thông qua t t c các dòng trong DataTable đ u tiên trong m t DataSet và đưa giá tr c t th 0 và th 1 vào m t ListBox: for (int i = 0; i < phonebookEntriesDataSet.Tables[0].Rows.Count; i++) { this.listBox1.Items.Add( phonebookEntriesDataSet.Tables[0].Rows[i][0] + "" + phonebookEntriesDataSet.Tables[0].Rows[i][1]); } 2.5 Thay đ i d li u trong m t DataSet Đ thay đ i d li u trong DataSet, truy c p vào DataColumn mà chúng ta mu n thay đ i và thi t l p giá tr m i. Khi t t c thay đ i đã k t thúc, g i AcceptChanges đ xác nh n s thay đ i. Ví d , đo n mã sau thi t l p c t th 2 trong dòng đ u tiên c a b ng đ u tiên trong t p h p DataSet thành m t s ngâu nghi n đư c cung c p b i randomGenerator, randomGenerator đư c cung c p trong l p Random. // Column 1 is the phone number. //| //V m_phonebookDS.Tables[0].Rows[0][1] = randomGenerator.Next().ToString(); Thay đ i b ng cách s d ng ch s tên, cách này s ch m hơn trong .NET Compact Framework khi lư ng l n d li u ph c t p: m_phonebookDS.Tables["Phone Contacts"].Rows[0]["PhoneNumber"] = l_randomGenerator.Next().ToString(); http://voer.vn/content/m46821/1.1/
  5. Thu vien Hoc Lieu Mo Viet Nam module: m46821 5 3 Ràng bu c d li u DataSet cho phép chúng ta ch ra qui t c riêng bi t, mà d li u trong t p h p DataSet.Tables ph i theo. L p cơ s Constraint ch rõ qui t c mà d li u trong DataTable ph i theo. ForeignKeyConstraint thư ng đư c s d ng đ t o s c m nh cho hành vi khi thay đ i ho c xóa c t khóa chính trong m t b ng. B i vì ForeignKeyConstraint đư c mong đ i đ s d ng trong mô hình quan h cha con gi a các b ng. 3.1 Thêm ràng bu c vào m t DataSet M i DataTable lưu tr trong t p h p DataSet.Tables lưu tr ConstraintCollection trong thu c tính Constraints. Vsi d , đ truy c p ConstraintCollection trong b ng đ u tiên c a m t DataSet, s d ng như sau: m_phonebookDS.Tables[0].Constraints Các bư c đ t o và kh i t o ràng bu c: Bư c 1: Thêm ràng bu c vào t p h p Constraints c a b ng thíc h p. Bư c 2: Thi t l p c DataSet.EnforceConstraints thành true đ b t yêu c u ràng bu c. Khi chúng ta thi t l p c thành true, m i ràng bu c trong m i t p h p DataTable.Constraints đư c ch n, và đưa ra m t ngo i l n u ki m tra b l i. 3.2 Thêm m t UniqueConstraint Đ thêm m t UniqueConstraint vào m t DataSet, làm theo các bư c sau: Bư c 1: T o m t UniqueConstraint b ng cách s d ng m t trong b n kh i t o trên .NET Compact Framework: UniqueConstraint(String name, DataColumn col) Creates a UniqueConstraint with specified name that enforces uniqueness on a single DataColumn. UniqueConstraint(DataColumn col) Creates a UniqueConstraint that enforces uniqueness on a single DataColumn. UniqueConstraint(String name, DataColumn[] cols) Creates a UniqueConstraint that enforces unique- ness for multiple columns in a row. The columns are specified by passing them as an array. UniqueConstraint(DataColumn[] cols) Same as above except the UniqueConstraint is nameless. UniqueConstraint(String name, string[] colNames, bool isPrimaryKey) This fifth public con- structor is useful only to the Smart Device Extensions environment. Bư c 2: Thêm UniqueConstraint vào t p h p Constraints c a DataTable mong mu n Bư c 3: Thi t l p DataSet.EnforceConstraints thành true đ b t s ràng bu c.. Ví d : // Add a UniqueConstraint to the phone number column // Note: Using indexing by the string "PhoneNumber" is slower UniqueConstraint l_UniqueConstraint = new UniqueConstraint(l_DataSet.Tables[0]. Columns["PhoneNumber"]); l_DataSet.Tables[0].Constraints.Add(l_UniqueConstraint); 3.3 Ngăn ng a giá tr NULL trong DataColumn Thu c tính DataColumn.AllowDBNull r t h u ích đ không cho phép m t DataColumn có giá tr DBNull. N u chúng ta t o m t DataRow m i và không đưa m t giá tr vào m t c t, nó nh n giá tr m c đ nh là DBNull. Ví d : http://voer.vn/content/m46821/1.1/
  6. Thu vien Hoc Lieu Mo Viet Nam module: m46821 6 l_newTable.Columns["Name"].AllowDBNull = false; N u DataColumn có AllowDBNull là false đư c thi t l p thành DBNull, ngo i l System.Data.NoNullAllowed đư c đưa ra khi m t dòng m i đư c thêm vào DataTable trong DataSet. Ví d : DataRow l_newRow = m_phonebookDS.Tables[0].NewRow(); l_newRow[0] = "Violator" l_newRow[1] = "5555587"; // This is going to throw an exception because the "Name" // DataColumn was never set, so it is DBNull, and that is // not allowed for the DataColumn m_phonebookDS.Tables[0].Rows.Add(l_newRow);] 4 Thi t l p trư ng t đ ng tăng giá tr Khi m t dòng đư c thêm vào DataTable, dòng r ng đư c t o b ng cách g i DataTable.NewRow. M t DataTable bi t gi n đ cho m t dòng, dòng này ph i đư c t o và th hi n dòng m i tương ng v i gi n đ . Có nghĩa là dòng m i lưu tr ph i có DataColumns cùng v i ki u d li u đúng v i cái mà chúng ta đã thi t l p. Thu c tính DataColumn.AutoIncrement có th đư c thi t l p trong DataTable là m t DataColumn có giá tr t đ ng tăng khi m t dòng m i đư c t o. Nó r t h u d ng khi làm trư ng khóa. Có ba thu c tính quan trong trong DataColumn liên quan đ n trư ng t đ ng tăng giá tr : DataColumn.AutoIncrement Thi t l p giá tr true cho DataColumn t đ ng tăng. DataColumn.AutoIncrementSeed Giá tr b t đ u cho giá t đ ng tăng. DataColumn.AutoIncrementStep Giá tr c a bư c nh y cho m i giá tr m i. N u DataColumn là m t c t tính tóan, sau đó c g ng thi t l p như là m t c t t đ ng tăng s nguyên nhân m t ArgumentException. N u ki u d li u c a DataColumn không ph i là Int16, Int32, ho c Int64, sau đó nó b ép ki u thành Int32. Nó có th là nguyên nhân m t d li u, n u DataColumn là ki u s th c. N u DataColumn là ki u chu i, thi t l p c t đó t đ ng tăng giá tr s ép ki u d li u c a c t này thành ki u integer. Ví d t o m t trư ng có giá t r t đ ng tăng: Thi t l p m t trư ng có giá tr t đ ng tăng t 10, bư c nh y có giá tr là 5. l_newTable.Columns["ContactID"].AutoIncrement = true; l_newTable.Columns["ContactID"].AutoIncrementSeed = 10; l_newTable.Columns["ContactID"].AutoIncrementStep = 5; 5 Mô hình d li u quan h v i DataSet Chúng ta hãy tìm hi u DataSet lưu tr DataTable, truy nh p d li u, và yêu c u theo m u ràng bu c trên d li u. Trong ph n này chúng ta xây d ng ki n th c và h c các thao tác n n t ng chung nh t v CSDL quan h cùng v i d li u bên trong DataSet. X u t phát t giá t r DataColumn cùng v i bi u th c và t r ư ng tính toán Giá tr c a DataColumn có th đư c tính toán d a trên giá tr c a DataColumn khác trong cùng m t DataRow. Đ làm đi u này, s d ng thu c tính DataColumn.Expression đ mô t giá tr tính toán c a DataColumn. Thu c tính Expression là m t giá tr chu i đư c mô t s tính toán xu t phát t giá tr cho DataColumn. Cú pháp bi u th c r t nhi u và h tr r t nhi u phép tính toán h c và chu i. B ng 4.1 đưa đ n t t c các phép toán đư c .NET Compact Framework h tr . http://voer.vn/content/m46821/1.1/
  7. Thu vien Hoc Lieu Mo Viet Nam module: m46821 7 Hình 2: B ng 4.1. Các phép toán Framework h tr đ tính toán Ví d : l_newTable.Columns["FullName"].Expression = "FirstName + ’ ’ + LastName"; l_newTable.Columns["TotalPrice"].Expression = "MSRP - Discount"; l_newTable.Columns["FinalGrade"].Expression = "Avg(Exam1, Exam2, Exam3)"; Bi u th c quan h cha con trong DataSet Th c ch t thành ph n c a CSDL quan h là các b ng v i các dòng có kh năng t o quan h cha con, ho c m t quan h , gi a hai b ng. M t quan h giưa hai b ng đư c t o b ng liên k t giưa hai b ng b ng m t ho c nhi u c t d li u g i là khóa chính. Trong b ng cha, khóa chính xác đ nh m i dòng là duy nh t trong b ng. Các dòng trong b ng con có m t trư ng g i là khóa ngo i, trư ng này không ph i là duy nh t trong b ng con. Ví d b ng cha MainContactTable, và b ng con CholesterolTable. Hình 3: B ng 4.2. MainContactTable http://voer.vn/content/m46821/1.1/
  8. Thu vien Hoc Lieu Mo Viet Nam module: m46821 8 Hình 4: B ng 4.3 CholesterolTable Trong b ng CholesterolTable, CustID tham chi u đ n m t b n ghi duy nh t trong b ng MainContactTable. B ng 4.4 và 4.5 cho th y quan h cha con khi lưu tr . Hình 5: B ng 4.4. MainContactTable http://voer.vn/content/m46821/1.1/
  9. Thu vien Hoc Lieu Mo Viet Nam module: m46821 9 Hình 6: B ng 4.5 CholesterolTable Trong ví d b ng cha con ví d trên, b n ghi trong b ng CholesterolTable tương ng v i George Wash- ington và m t b n ghi tương ng v i Ben Franklin. V n đ gì s xây ra n u b n ghi George Washington b xóa trong b ng MainContactTable? H th ng s b xóa t t c b n ghi tương ng trong b ng CholesterolTable, ho c CSDL s tr ng thái l i. .NET Compact Framework cung c p hai l p có th làm vi c đó t đ ng: DataRelation và ForeignKeyConstraint. T o m t DataRelation đ th h i n quan h cha con Khi thi t l p m t DataRelation gi a hai b ng, chúng ta ch rõ DataColumn như là khóa chính và khóa ngo i. Sau khi DataRelation đư c t o, nó s đ m b o r ng d li u quan h c a DataSet như là đư c mô t b i DataRelation. Ví d , n u chúng ta xóa b n ghi đ u tiên trong b ng MainContactTable, DataRelation s t đ ng xóa t t c các dòng con trong b ng CholesterolTable. Đ thi t l p DataRelation gi a hai b ng trong m t DataSet, trư c tiên t o DataRelation b ng cách s d ng hàm kh i t o thông qua DataColumns bao g m khóa chính và khóa ngo i. Các hàm kh i t o .NET Compact Framework như sau: [U+F0B7] DataRelation(String relName, DataColumn parent, DataColumn child) T o m t DataRelation gi a DataColumns cha và con. [U+F0B7] DataRelation(String relName, DataColumn[] parent, DataColumn[] child) T o DataRelation gi a hai b ng s d ng nhi u trư ng cho m i b ng đê quan h . [U+F0B7] DataRelation(String relName, DataColumn parent, DataColumn child, bool createConstraints) T o m t DataRelation gi a DataColumns cha và con. [U+F0B7] DataRelation(string relName, DataColumn[] parent, DataColumn[] child, bool createConstraints T o DataRelation gi a hai b ng b ng cách s d ng nhi u c t trong m i b ng cho liên k t. [U+F0B7] DataRelation(string relName, string parentTableName, string childTableName, string[] parentColNames, string[] childColNames, bool isNested) là m t kh i t o đã s d ng môi trư ng Smart Device Extensions. V i t mã l nh đ t o DataRelation DataRelation l_newRelation = new DataRelation( "MainContactToCholesterolRelation", l_DataSet.Tables["PhoneContactsMainTable"].Columns["ContactID"], l_DataSet.Tables["Cholesterol"].Columns["ContactID"]); l_DataSet.Relations.Add(l_newRelation); http://voer.vn/content/m46821/1.1/
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
3=>0