Bai 8 - Adodotnet

  • June 2020
  • PDF

This document was uploaded by user and they confirmed that they have the permission to share it. If you are author or own the copyright of this book, please report to us by using this DMCA report form. Report DMCA


Overview

Download & View Bai 8 - Adodotnet as PDF for free.

More details

  • Words: 1,727
  • Pages: 9
Bài 8 Giới thiệu về ADO.NET Mục đích của bài: Sau bài học này, người học có thể - Liệt kê được các thành phần chính trong kiến trúc của ADO.NET - Nêu được các ưu điểm của ADO.NET và những điểm khác so với ADO - Mô tả được chức năng của các đối tượng (lớp) Connection, DataAdapter, DataCommand, DataSet, DataReader, DataGrid của ADO.NET. Nội dung:

1. Giới thiệu về ADO.NET (ADO = ActiveX Data Object) - ADO.NET là một tập các lớp nằm trong bộ thư viện lớp cơ sở của .NET Framework, cho phép các ứng dụng windows (như C#, VB.NET) hay ứng dụng web (như ASP.NET) thao tác dễ dàng với các nguồn dữ liệu. - Mục tiêu chính của ADO.NET là:  Cung cấp các lớp để thao tác CSDL trong cả hai môi trường là phi kết nối (Disconected data) và kết nối (Connected data).  Tích hợp chặt chẽ với XML (Extensible Markup Language)  Tương tác với nhiều nguồn dữ liệu thông qua mô tả dữ liệu chung.  Tối ưu truy cập nguồn dữ liệu (OLE DB & SQL server).  Làm việc trên môi trường Internet (môi trường phi kết nối – Disconnected eviroment). - Các lớp của ADO.NET được đặt trong Namespace là System.Data/ System.Data.oledb - ADO.NET bao gồm 2 Provider (2 bộ thư viện) (thường dùng) để thao tác với các CSDL là: OLE DB Provider (nằm trong System.Data.OLEDB) dùng để truy xuất đến bất kỳ CSDL nào có hỗ trợ OLEDB; SQL Provider (nằm trong System.Data.SQLClient) chuyên dùng để truy xuất đến CSDL SQL Server (Không qua OLE DB nên nhanh hơn). - Vị trí của ADO.NET trong kiến trúc của .NET Framework

Vị trí của ADO.NET trong kiến trúc của .net Framework Từ kiến trúc ta thấy rằng: ADO.NET là một thành phần nội tại () của .NET framework, do vậy nó có thể được sử dụng trong tất cả các ngôn ngữ hỗ trợ .NET như C#, VB.NET… mà không có sự khác biệt nào (Tức là các chức năng cũng như cách sử dụng hoàn toàn giống nhau).

2. So sánh ADO với ADO.NET -

2 mô hình lập trình tương tự nhau ADO.NET được thiết kế làm việc với cả dữ liệu phi kết nối trong môi trường đa tầng (Multi-Tier). Nó sử dụng XML để trao đổi dữ liệu phi kết nối, do vậy dễ dàng khi giao tiếp giữa các ứng dụng không phải trên nền windows. ADO.NET là thành phần nội tại (có sẵn) trong .NET Framework, do vậy dễ dàng khi phát triển bằng nhiều ngôn ngữ khác nhau. ADO.NET Hỗ trợ XML hoàn toàn (ADO thì không), nghĩa là chúng ta có thể nạp dữ liệu từ một tệp XML và thao tác như một CSDL, sau đó cũng có thể lưu kết quả ngược trở lại tệp XML. ADO lưu trữ dữ liệu dưới dạng nhị phân nên có thể bị chặn bởi Firewall, còn ADO.NET lưu trữ dữ liệu dưới dạng XML nên có thể đi qua một cách dễ dàng.

3. Các thành phần chính của ADO.NET 1. 2. 3. 4. 5.

Connection Command Datareader DataAdapter DataSet

Figure 5-1. High -level architecture of ADO.NET

Recordset

Mdb; mdf, XML…

*** Qui ước: ADO.NET cung cấp cho ta một số Provider để làm việc hiệu quả với các CSDL khác nhau. Tuy nhiên, về phía lập trình thì cách thức sử dụng chúng rất giống nhau. Do vậy, trong bài giảng này chỉ giới thiệu Provider là OLEDB (Đây là Provider đa năng vì có thể truy cập đến rất nhiều CSDL khác nhau như Access, SQL, Oracle…), còn các Provider khác để bạn đọc tự đọc thêm. Ví dụ sau đây cho thấy rõ điều này:

3.1 Connection + Chức năng: Là đối tượng có nhiệm vụ thực hiện kết nối đến Cơ sở dữ liệu để các đối tượng như Command thao tác với CSDL thông qua Connection này. + Khai báo (có nhiều cách): Imports System.Data.SqlClient Imports System.Data.OleDb Public Class ADODemo Private Cnn1 As New OleDbConnection() Private Cnn2 As New OleDbConnection("Provider = OLEDB...") Private Cnn As OleDbConnection Private Sub ADODemo_Load(ByVal Sender As Object …)

Dim S as String = “Provider=Microsoft.Jet.OLEDB.4.0;Data Source="C:\NWIND.MDB"

Cnn = New OleDb.OleDbConnection(S) End Sub End Class

+ Mở kết nối:

Open

Cnn. (): Mở kết nối đến CSDL do ta chỉ định trong ConnectionString + Kiểm tra kết nối : Sau khi gọi phương thức Open, có thể xem đã kết nối thanh công hay không thông qua thuộc tính State của Connection: If Cnn.State = 1 Then MsgBox “Kết nối thành công !” + Đóng kết nối: Cnn.Close()  Thường thì nên viết như sau để tránh lỗi : If Cnn.State = 1 Then Cnn.Close() Imports System.Data.SqlClient Imports System.Data.OleDb Public Class ADODemo Private Cnn As OleDb.OleDbConnection ‘// Tạo kết nối đến csdl nwind.mdb Private Sub ADODemo_Load(ByVal sender…) Cnn = New OleDb.OleDbConnection("Provider=Microsoft. Jet.OLEDB.4.0;Data Source=C:\NWIND.MDB") Cnn.Open() If Cnn.State = ConnectionState.Open Then MsgBox("Success!")

End Sub ‘// Khi đóng ứng dụng (Form bị đóng) Private Sub ADODemo_FormClosing(ByVal sender As…) If Cnn.State = ConnectionState.Open Then Cnn.Close() End If End Sub End Class 3.2 Command - Công dụng : Dùng để thực hiện các câu lệnh SQL thao tác với CSDL, như : Insert, Update, Select, Delete…  Có 2 cách để tạo đối tượng Command  Có 4 cách để thực thi một lệnh thông qua đối tượng Command

ExecuteReader

Count, sum,…. Insert, update, delete … (Áp dụng cho SQL)

3.1.1 Tạo command từ phương thức tạo dựng (Thiết lập) ‘/// Tạo một Command với câu lệnh là Select * …. Command này sẽ ‘/// sử dụng Connection có tên là Cnn để thực thi câu lệnh. Private Cmd As New OleDbCommand(,)

3.1.2 Tạo command từ phương thức CreateCommand của đối tượng Connection Private Cnn As new OleDbConnection Private Cmd As OleDbCommand '/// Trước khi gọi phương thức này, đảm bảo Cnn đã Open CSDL

Private Sub TaoCommand() Cmd = Cnn.CreateCommand Cmd.CommandText = "Select count(*) from Customers" MsgBox("Số bản ghi : " & Cmd.ExecuteScalar) End Sub 3.1.3 Tạo Command bằng cách đặt các thuộc tính sau khi khai báo Public Class ADODemo Private Cnn As OleDbConnection Private Cmd As OleDbCommand Private Sub ADODemo_Load(ByVal sender…) Cnn = New OleDb.OleDbConnection _ ("Provider=Microsoft.Jet.OLE

DB.4.0;Data Source=C:\NWIND.MDB")

Cnn.Open() Cmd = New OleDbCommand Cmd.CommandType = CommandType.Text '/// Mặc định Cmd.Connection = Cnn Cmd.CommandText = "Select count(*) from Customers" MsgBox("Số bản ghi : " & Cmd.ExecuteScalar)

End Sub End Class Thực hiện câu lệnh thông qua đối tượng Command ** Lưu ý: Chỉ có thể thực hiện được câu lệnh nếu như Command đã được gắn với một Connection hợp lệ (Tức đã kết nối đến CSDL) - Thực thi bằng phương thức ExecuteReader Phương thức này sẽ trả về một tập các bản ghi, nó tương đương với một Recordset và thường được sử dụng để thực thi các câu lệnh truy vấn như SELECT. Kết quả có thể lưu trữ trong đối tượng DataReader để thao tác. Cú pháp : Biến_DataReader = Cmd.ExecuteReader () - Thực thi bằng phương thức : ExecuteScalar() Phương thức này sẽ trả về giá trị của phần tử thuộc hàng đầu tiên và cột đầu tiên trong bảng kết quả

Phương thức này thường được sử dụng để thực hiện các câu lệnh mà kết quả trả về chỉ có 1 hàng và 1 cột (ví dụ câu lệnh Select Count(*) From Customers) - Thực thi bằng phương thức ExecuteNonQuery: Được sử dụng để thực thi các câu lệnh mà không có giá trị trả về như : Insert, Update, Delete … -

Thực thi bằng phương thức ExecuteXMLReader : Tạo một bộ đọc từ file XML.

Phương thức này không có trong oleCommand, chỉ có trong sqlCommand. 3.3 DataReader Công dụng: Dùng để đón nhận kết quả trả về từ phương thức ExecuteReader của đối tượng Command. Nó tương tự như một Recordset của ADO, tuy nhiên dữ liệu là Readonly và chỉ đọc theo chiều tiến. - Khai báo: Dim As oledbDataReader ‘///

không có new

- Lấy kết quả từ Command = .ExecuteReader()

Ví dụ: '/// Đọc các kết quả từ việc thực thi câu lệnh của Command

Private Sub DataReaderDemo() Dim cmd2 As New OleDbCommand("Select * from Employees", Cnn) Dim dat as oledbDataReader Dat = cmd2.ExecuteReader '/// Hiển thị kết quả ‘/// Duyệt các bản ghi đã được lưu trong datareader

Do While Dat.Read = True MsgBox(Dat("Firstname") & vbTab & Dat("Title")) Loop cmd2.Dispose() Dat.Close() End Sub 3.3.2 DataSet Object a) Công dụng: lưu trữ một tập các bảng (Table) và cung cấp một số phương thức, thuộc tính… để thao tác dữ liệu mà nó lưu trữ. 0

1

2

DataSet Object - Các bảng trong DataSet được lưu trữ trong một tập hợp có tên là …. ? - Mỗi bảng trong DataSet là một đối tượng DataTable. Mỗi Table này có thể lưu trữ một bảng dữ liệu của DataBase( Access hoặc SQL Server). b) Truy xuất đến các bảng Cú pháp: .Tables(Chỉ số / hoặc tên của bảng) Ví dụ: Ds.Tables(0) hoặc Ds.Tables(“DSSV”) 3.3.1 DataTable 3.3.2 Data Row

3.3.3 DataColunm 3.4 DataAdapter Công dụng: Có chức năng như một chiếc cầu nối giữa nguồn (tệp) dữ liệu và các bảng được cached trong bộ nhớ (đối tượng DataSet.). DataAdapter nhận dữ liệu vào một

Fill

dataset hay datatable từ một nguồn dữ liệu sử dụng phương thức (). Còn khi cập nhật dữ liệu ngược trở lại nguồn dữ liệu thì DataAdapter sử dụng phương thức

Update. -

Tạo đối tượng DataAdapter, có 2 cách: hoặc là tạo từ đối tượng Connection vừa được mở hoặc tạo từ đối tượng Connection mới.

Tạo DataAdapter từ một Connection đã mở (tồn tại) trước đó: Public Sub TaoAdapter() Dim oledbCnn = New OleDbConnection() oledbCnn.ConnectionString = "Provider=…" oledbCnn.Open() Dim cmd As New OleDbCommand() cmd.Connection = oledbCnn cmd.CommandText = "Select * from authors" Dim oleAdapt As New OleDbDataAdapter oleAdapt.SelectCommand = cmd ‘// Chọn lệnh nằm trong cmd để thao tác End Sub Tạo từ một Connection chưa được mở Sub TaoAdapterVer2() Dim Cnn2 As New OleDbConnection Cnn2.ConnectionString = strCon Dim Adapt As New OleDbDataAdapter("Select * from Customers", Cnn2) End Sub -

Lưu trữ kết quả vào trong DataSet

Adapt.Fill(, “Tên cho bảng”)

Related Documents

Bai 8 - Adodotnet
June 2020 3
Bai 8
October 2019 3
Bai 8
November 2019 13
Bai 8 Av Control
November 2019 4
Bai Tap 8-tindc
November 2019 6