Giáo trình Công nghệ thông tin - Chương 8: Lập trình cơ sở dữ liệu với ADO.NET - Phan Trọng Tiến

pdf 45 trang huongle 4200
Bạn đang xem 20 trang mẫu của tài liệu "Giáo trình Công nghệ thông tin - Chương 8: Lập trình cơ sở dữ liệu với ADO.NET - Phan Trọng Tiến", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

Tài liệu đính kèm:

  • pdfgiao_trinh_cong_nghe_thong_tin_chuong_8_lap_trinh_co_so_du_l.pdf

Nội dung text: Giáo trình Công nghệ thông tin - Chương 8: Lập trình cơ sở dữ liệu với ADO.NET - Phan Trọng Tiến

  1. CHƯƠNG 8: LẬP TRÌNH CƠ SỞ DỮ LIỆU VỚI ADO .NET Phan Trọng Tiến BM Công nghệ phần mềm Khoa Công nghệ thông tin, VNUA Email: phantien84@gmail.com Website: 1
  2. Nội dung chính 1. Tổng quan 2. Tổng quan ADO .Net 3. .Net Data Provider 4. Demo: Lấy dữ liệu dùng ADO .Net 5. Đối tượng DataSet 6. Thiết kế và gắn kết dữ liệu 7. Tích hợp XML 8. Lab: Tạo ứng dụng ADO.Net 2
  3. Mục đích của chương qCh ương này cung cấp sinh viên kiến thức cần thiết để tao các ứng dụng mức cao truy cập dữ liệu dùng VB.Net qSau bài này sinh viên có thể: qLi ệt kê các lợi ích ADO .Net qT ạo các ứng dụng dùng ADO .Net qLi ệt kê các thành phần chính của đối tượng ADO.Net và các chức năng của nó. qDùng VS.Net để thiết kế và gắn kết dữ liệu qGi ải thích cách tích hợp XML cùng ADO.Net 3
  4. 1. Tổng quan qB ạn sẽ học cách sử dụng ADO .Net qCách sử dụng đối tượng DataSet qB ạn sẽ học cách thiết kế dữ liệu trong VS.Net và cách gắn dữ liệu lên WinForm và WebForm. qCu ối cùng bạn sẽ học cách tích hợp XML vào ADO .Net 4
  5. 2. Tổng quan ADO .Net qGi ới thiệu ADO .Net qCác lợi ích ADO .Net 5
  6. Giới thiệu ADO .Net 6
  7. Giới thiệu ADO.Net q ADO.Net là một tập các lớp cho phép các ứng dụng .Net đọc và cập nhật thông tin DB và các nơi lưu trữ dữ liệu khác. Namespace: System.Data q ADO.Net cung cấp đồng nhất cách truy cập các nguồn dữ liệu khác nhau như SQL Server, OLE DB, các nguồn dữ liệu không quan hệ như MS Exchange, và các tài liệu XML q ADO.Net cải tiến khả năng disconnect tới dữ liệu. 7
  8. Giới thiệu ADO.Net q ADO.Net cung cấp hai .Net Data Providers: q.Net Data Provider cho SQL Server q.Net Data Provider cho OLE DB q ADO.Net cung cấp nhiều công cụ cho việc đọc, cập nhật, thêm mới và xóa dữ liệu. Nhiều đối tượng trong thư viện là tương tự nhau và được nhận diện qua tên tiền tố của chúng ví dụ như SqlDataReader và OleDbDataReader cả hai đều cung cấp đọc các bản ghi từ nguồn dữ liệu. 8
  9. Các lợi ích của ADO.Net q Tương tự như ADO q Được thiết kế cho dữ liệu không kết nối. q Nằm trong nội tại .Net Framework nên dễ dàng trong việc sử dụng ngôn ngữ để phát triển. q Hỗ trợ XML qADO và XML có trước nhưng không tương thích qADO dựa trên cơ sở dữ liệu quan hệ. qXML dựa trên cơ sở dữ liệu phân cấp. qADO.Net kết hợp hai công nghệ này lại với nhau. 9
  10. 3. .Net Data Provider q .Net Data Provider cho phép truy cập các nguồn dữ liệu xác định: qSystem.Data.SqlClient dùng truy câp SQL Server 7.0 trở lên qSystem.Data.OleDb dùng truy cập bất kỳ nguồn dữ liệu nào hỗ trợ OLE DB q Dùng đối tượng Connection qK ết nối tới một Database q Dùng đối tượng Command qTh ực thi các câu lệnh qDùng đối tượng Command với các Stored Procedure q Dùng đối tượng DataReader qT ạo một luồng dữ liệu chỉ đọc q Dùng đối tượng DataAdapter qđể thay đổi dữ liệu nguồn và một DataSet 10
  11. Dùng đối tượng Connection qSqlConnection Dim conSQL As SqlClient.SqlConnection conSQL = New SqlClient.SqlConnection( ) conSQL.ConnectionString = “Server = localhost; DataSource = Northwind; Uid = sa; Pwd = sa;” conSQL.Open( ) qOleDbConnection Dim conAccess As OleDb.OleDbConnection conAccess = New OleDb.OleDbConnection( ) conAccess.ConnectionString = "Provider= Microsoft.Jet.OLEDB.4.0;Data Source=c:\NWind.MDB" conAccess.Open( ) 11
  12. Dùng đối tượng Command q Có hai cách để tạo đối q Có ba cách để thực thi tượng Command: một Command: qS ử dụng Contructor qExecuteReader Command qExecuteScalar qS ử dụng phương thức qExecuteNonQuery CreateCommand qExecuteXMLReader Dim commSQL As SqlClient.SqlCommand commSQL = New SqlClient.SqlCommand( ) commSQL.Connection = conSQL commSQL.CommandText = "Select Count(*) from Authors" MessageBox.Show(commSQL.ExecuteScalar( ).ToString) 12
  13. Dùng đối tượng Command với các Stored Procedure q Tạo một đối tượng Command q Thiết lập CommandType là StoredProcedure q Dùng phương thức Add để tạo và thiết lập các biến (Parameter) q Dùng thuộc tính ParameterDirection để thiết lập kiểu biến q Gọi phương thức ExecuteReader q Dùng đối tượng DataReader để hiển thị hoặc duyệt qua các bản ghi và đóng khi kết thúc q Truy cập đầu ra và trả về các biến 13
  14. Demo: Dùng đối tượng Command q Tạo một Store trong SQL Server CREATE PROCEDURE byroyalty @percentage int AS select au_id from titleauthor where titleauthor.royaltyper = @percentage q Code VB.Net Imports System.Data.SqlClient Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim conSQL As SqlClient.SqlConnection conSQL = New SqlClient.SqlConnection( ) conSQL.ConnectionString = “Server = localhost;DataBase = Pubs;" & _ “UID = sa;PWD = sa" conSQL.Open( ) Dim commSQL As SqlClient.SqlCommand = New SqlCommand( ) commSQL.Connection = conSQL commSQL.CommandType = CommandType.StoredProcedure commSQL.CommandText = "byroyalty" 14
  15. Demo: Dùng đối tượng Command Dim paramSQL As New SqlClient.sqlParameter( _ "@percentage", SqlDbType.Int) paramSQL.Direction = ParameterDirection.Input paramSQL.Value = "30" commSQL.Parameters.Add(paramSQL) Dim datRead As SqlClient.SqlDataReader datRead = commSQL.ExecuteReader( ) Do While datRead.Read( ) MessageBox.Show(datRead(0).ToString) Loop datRead.Close( ) End Sub 15
  16. Dùng đối tượng DataReader q Đọc dữ liệu Dim commSQL As SqlClient.SqlCommand = New _ SqlClient.SqlCommand( ) commSQL.Connection = conSQL commSQL.CommandText ="Select au_lname,au_fname from authors" Dim datRead As SqlClient.SqlDataReader datRead = commSQL.ExecuteReader( ) Do Until datRead.Read = False MessageBox.Show(datRead.GetString(1) & " " & datRead.GetString(0)) Loop datRead.Close( ) q Lấy thông tin q Trả về nhiều tập hợp kết quả 16
  17. Dùng đối tượng DataAdapter qĐượ c sử dụng như một liên kết giữa DataSource và Các Table lưu trữ trong Cache Dim adaptSQL As New SqlClient.SqlDataAdapter( _ "Select * from authors", conSQL) Dim datPubs As DataSet = New DataSet( ) adaptSQL.Fill(datPubs, "NewTable") ' Manipulate the data locally adaptSQL.Update (datPubs, "NewTable") 17
  18. 4. Demo: Lấy dữ liệu dùng ADO .Net qB ạn sẽ học cách lấy dữ liệu từ CSDL SQL Server bằng việc dùng đối tượng SQLDataAdapter trong VB.Net. 18
  19. 5. Đối tượng DataSet qT ổng quan về dữ liệu không kết nối qĐố i tượng DataSet qC ư trú dữ liệu trong DataSet qS ử dụng Relationship trong DataSet qS ử dụng các Constraint qC ập nhật dữ liệu trong DataSet qC ập nhật dữ liệu tại nguồn 19
  20. Tổng quan về dữ liệu không kết nối 20
  21. Tổng quan về dữ liệu không kết nối q Mỗi công nghệ truy cập dữ liệu đều đã được cải thiện khái niêm không kết nối, nhưng đến ADO.Net mới cung cấp giải pháp cách đầy đủ. q ADO.Net được thiết kế dùng cho Internet q ADO.Net sử dụng XML như là các định dạng truyền tải. q ADO.Net cung cấp một đối tượng mới cho việc caching dữ liệu trên máy client. Đối tượng này là DataSet 21
  22. Đối tượng DataSet 22
  23. Cư trú dữ liệu trong DataSet q Cư trú dữ liệu trong DataSet từ một RDBMS Dim adaptSQL As SqlClient.SqlDataAdapter adaptSQL = New SqlClient.SqlDataAdapter( "Select * from authors", conSQL) Dim datPubs As DataSet = New DataSet( ) adaptSQL.Fill(datPubs, "NewTable") q Lập trình tạo Dataset Dim datPubs As DataSet = New DataSet( ) Dim tblAuthors As DataTable = New DataTable("authors") tblAuthors.Columns.Add("AuthorID", System.Type.GetType ("System.Int32")) 23
  24. Sử dụng Relationship trong DataSet qT ạo Relationship Dim relPubsTitle As DataRelation = New DataRelation( "PubsTitles", datPubs.Tables("Publishers").Columns("pub_id"), datPubs.Tables("Titles").Columns("pub_id")) datPubs.Relations.Add(relPubsTitle) qTruy cập dữ liệu quan hệ Dim PubRow As DataRow, TitleRows( ) As DataRow PubRow = datPubs.Tables("Publishers").Rows(0) TitleRows = PubRow.GetChildRows("PubsTitles") 24
  25. Sử dụng các Constraint q Tạo New Constraint qForeignKeyConstraints: đây là ràng buộc xảy ra khi một hàng con cũng được cập nhật khi hàng cha được update hoặc delete qUniqueConstraints: đây là ràng buộc đảm bảo các giá trị trong một cột hoặc các cột là duy nhất. q Sử dụng Constraint tồn tại adaptSQL = New SqlClient.SqlDataAdapter("Select title_id, title, type, price from titles", conSQL) adaptSQL.FillSchema(datPubs, schematype.Source, "Titles") adaptSQL.Fill(datPubs, "Titles") 'Edit some data adaptSQL.Fill(datPubs, "Titles") 25
  26. Cập nhật dữ liệu trong DataSet q Thêm Rows Dim drNewRow As DataRow = datPubs.Tables("Titles").NewRow 'Populate columns datPubs.Tables("Titles").Rows.Add(drNewRow) q Thay đổi Rows drChangeRow.BeginEdit( ) drChangeRow("Title") = drChangeRow("Title").ToString & " 1" drChangeRow.EndEdit( ) q Xóa dữ liệu datPubs.Tables("Titles").Rows.Remove(drDelRow)) 26
  27. Cập nhật dữ liệu tại nguồn qCh ỉ rõ ràng các cập nhật Dim cmd As cmd.CommandText = "Insert into titles(" & _ "title_id, title, type) values(@t_id,@title,@type)" cmd.Parameters.Add("@t_id",SqlDbType.VarChar,6,"title_id") cmd.Parameters.Add("@title",SqlDbType.VarChar,80,"title") cmd.Parameters.Add("@type",SqlDbType.Char,12,"type") adaptSQL.InsertCommand = cmd adaptSQL.Update(datPubs, "titles") q Dim sqlCommBuildT ự động phátAs New sinh SqlCommandBuilder(adaptSQL) update adaptSQL.Update(datPubs, "titles") MsgBox(sqlCommBuild.GetInsertCommand.ToString) 27
  28. Demo: Sử dụng DataSet 28
  29. 6.Thiết kế và gắn kết dữ liệu qThi ết kế DataSet qTùy chỉnh form dữ liệu qG ắn dữ liệu trong WinForms qG ắn dữ liệu trong WebForms 29
  30. Thiết kế DataSet qTùy chỉnh cấu hình DataAdapter qPhát sinh đối tượng DataAdapter trong thủ tục InitializeComponent dùng trong code của bạn. qCông cụ phát sinh DataSet qPhát sinh một DataSet trên cơ sở dữ liệu đã tồn tại một DataAdapter. 30
  31. Tùy chỉnh cấu hình DataAdapter qTên kết nối qKi ểu truy vấn qCâu lệnh SQL qHo ặc Stored Procedure mới qHo ặc Stored Procedure đã tồn tại qCác chi tiết lựa chọn câu truy vấn 31
  32. Công cụ phát sinh DataSet q Đây là công cụ phát sinh DataSet tự động từ DataAdapter 32
  33. Tùy chỉnh form dữ liệu qCác thông tin được yêu cầu: qTên của DataSet qConnection được sử dụng qCác Table hoặc các View nào, và các cột của chúng. qCách hiển thị dữ liệu qNh ững button nào được tạo 33
  34. Demo: Sử dụng Form tùy chỉnh dữ liệu 34
  35. Gắn dữ liệu trong WinForms qCách gắn đơn giản da = New SqlClient.SqlDataAdapter("Select au_lname, " & _ "au_fname from authors", sqlconn) da.Fill(ds, "authors") TextBox1.DataBindings.Add("Text", _ ds.Tables("authors"), "au_fname") qCách gắn phức tạp da = New SqlClient.SqlDataAdapter("Select au_lname, " & _ "au_fname from authors", sqlconn) da.Fill(ds, "authors") DataGrid1.DataSource = ds.Tables("authors") 35
  36. Gắn dữ liệu trong WebForms qG ắn dữ liệu chỉ đọc Dim sqlComm As New SqlClient.SqlCommand("Select“ &_ “ * from authors", sqlconn) Dim sqlReader As SqlClient.SqlDataReader sqlReader = sqlComm.ExecuteReader DataGrid1.DataSource( ) = sqlReader DataGrid1.DataBind( ) 36
  37. 7.Tích hợp XML qT ại sao phải dùng schemas (giản đồ)? qMiêu tả cấu trúc XML qT ạo Schemas qS ử dụng XML và Schemas trong ADO.Net qDataSets và XmlDataDocuments 37
  38. Tại sao phải dùng Schemas qĐị nh nghĩa định dạng của dữ liệu qS ử dụng để kiểm tra tính hợp lệ qCó lợi thế hơn qua việc định nghĩa các kiểu tài liệu (document type definitions - DTSs ) qCú pháp XML qS ử dụng lại các kiểu qNhóm một nhóm các phần tử 38
  39. Miêu tả cấu trúc XML qSchemas có thể được miêu tả gồm: qCác phần tử trong tài liệu (E) qCác thuộc tính tính trong tài liệu (A) qCác quan hệ giữa phần tử và thuộc tính (R) qCác kiểu dữ liệu qTh ứ tự của các phần tử qCác phần tử nào là tùy chọn 39
  40. Ví dụ một tài liệu XML 0736 Lucerne Publishing Boston MA USA 0877 Litware, Inc. Washington DC USA 40
  41. Ví dụ Tài liệu này liên kết một schema để miêu tả cấu trúc 41
  42. Tạo Schemas qT ạo Schemas từ các tài liệu XML đã tồn tại. qT ạo Schemas từ Databases qLàm việc với Schemas qKi ểm tra các tài liệu XML dựa vào Schema 42
  43. Dùng dữ liệu XML và schemas trong ADO.Net qN ạp dữ liệu XML vào một DataSet Dim datXML As DataSet = New DataSet() datXML.ReadXml("c:\publishers.xml") MessageBox.Show(datXML.Tables(0).Rows(0)(0).ToString) qS ử dụng kiểu DataSet được định nghĩa qT ăng hiệu năng qĐơ n giản trong việc coding MessageBox.Show(pubs.Publishers(0).pub_id) 43
  44. DataSets và XmlDataDocuments 44
  45. Demo: Sử dụng XML Schema 45