cs06

82
Bài ging môn hc Lp trình Windows Form vi C# Bài 7: ADO.NET Lương Trn Hy Hiến FIT, HCMUP

Upload: phan-thuy-quynh

Post on 27-Jun-2015

153 views

Category:

Documents


5 download

TRANSCRIPT

Page 1: Cs06

Bài giảng môn học

Lập trình Windows Form v ới C#

Bài 7: ADO.NET

Lương Tr ần Hy Hi ến

FIT, HCMUP

Page 2: Cs06

Lập trình Windows Form với C#

Lương Tr ần Hy Hi ến © 2010 Khoa CNTT – ĐH Sư Phạm TpHCM

Nội dung

�ADO.NET

�Sơ lược l ịch sử phát tri ển

�Kiến trúc ADO.NET

� .NET Data Provider

�DataSet

�Hỏi & Đáp

2

Page 3: Cs06

Lập trình Windows Form với C#

Lương Tr ần Hy Hi ến © 2010 Khoa CNTT – ĐH Sư Phạm TpHCM

Giới thi ệu ADO.NET

�ActiveX Data Object .NET (ADO.NET)

– Công nghệ của MS

– Phát triển từ nền tảng ADO

– Cung cấp các lớp đối tượng và hàm thư viện phục vụ cho việc kết nối và xử lý dữ liệu

.NET Application

ADO.NET

3

Page 4: Cs06

Lập trình Windows Form với C#

Lương Tr ần Hy Hi ến © 2010 Khoa CNTT – ĐH Sư Phạm TpHCM

Giới thi ệu ADO.NET

�Mô hình .NET FrameworkMicrosoft .NET Framework

Common Language Runtime

Base Classes

Web Services User Interface

Data and XML

ADO.NET XML ... ...

4

Page 5: Cs06

Lập trình Windows Form với C#

Lương Tr ần Hy Hi ến © 2010 Khoa CNTT – ĐH Sư Phạm TpHCM

Nội dung

• ADO.NET

�Sơ lược l ịch sử phát tri ển

�Kiến trúc ADO.NET

� .NET Data Provider

�DataSet

�Hỏi & Đáp

5

Page 6: Cs06

Lập trình Windows Form với C#

Lương Tr ần Hy Hi ến © 2010 Khoa CNTT – ĐH Sư Phạm TpHCM

Sơ lược l ịch sử phát tri ển

� Native API

ODBC

Driver

Driver

Driver

Application

Application

Database

Database

DB API

DB API

DB API

ODBC API

DB API

DB API

DB API

� Open DataBase Connectivity

6

Page 7: Cs06

Lập trình Windows Form với C#

Lương Tr ần Hy Hi ến © 2010 Khoa CNTT – ĐH Sư Phạm TpHCM

Sơ lược l ịch sử phát tri ển (cont)

� OLEDB và ADO

ADO

OLE DB

Application

Non-Relational Data

Relational Data

ODBC

Driver

Driver

Driver

Provider

Provider

Provider

Provider

OLE: Object Linking and Embedding

7

Page 8: Cs06

Lập trình Windows Form với C#

Lương Tr ần Hy Hi ến © 2010 Khoa CNTT – ĐH Sư Phạm TpHCM

Sơ lược l ịch sử phát tri ển (cont)ADO.NET

8

Page 9: Cs06

Lập trình Windows Form với C#

Lương Tr ần Hy Hi ến © 2010 Khoa CNTT – ĐH Sư Phạm TpHCM

Introduction

Storedinto

Database (Oracle, SQL Server)

Client

ADO.NET

Data access technology9

Page 10: Cs06

Lập trình Windows Form với C#

Lương Tr ần Hy Hi ến © 2010 Khoa CNTT – ĐH Sư Phạm TpHCM

ADO.NET architecture

Database

XML

XML

10

Page 11: Cs06

Lập trình Windows Form với C#

Lương Tr ần Hy Hi ến © 2010 Khoa CNTT – ĐH Sư Phạm TpHCM

ADO.NET (tt)

�Hổ trợ bởi .Net Platform

�Sử dụng công ngh ệ XML để chuy ển đổi dữ liệu.

� Tương tác v ới tất cả các lo ại cơ sở dữ liệu.

�Khả năng th ực thi nhanh.

�Sử dụng cho các lo ại ứng dụng client-server.

11

Page 12: Cs06

Lập trình Windows Form với C#

Lương Tr ần Hy Hi ến © 2010 Khoa CNTT – ĐH Sư Phạm TpHCM

Nội dung

�ADO.NET

�Sơ lược l ịch sử phát tri ển

�Kiến trúc ADO.NET

� .NET Data Provider

�DataSet

�Hỏi & Đáp

12

Page 13: Cs06

Lập trình Windows Form với C#

Lương Tr ần Hy Hi ến © 2010 Khoa CNTT – ĐH Sư Phạm TpHCM

Kiến trúc

�Connected Model

�Disconnected Model

Chương trình

Chương trình

13

Page 14: Cs06

Lập trình Windows Form với C#

Lương Tr ần Hy Hi ến © 2010 Khoa CNTT – ĐH Sư Phạm TpHCM

ADO.NET

�ADO.NET là một phần của .NET Framework

– Thư viện lớp có chức năng thao tác d ữ liệu trong ngôn ngữ MS.NET

�ADO.NET là dạng “ Disconnected ”

– Cho phép lấy cả một cấu trúc phức tạp của DL từ CSDL, sau đó ngắt kết nối rồi mới thực hiện thao tác xử lý!

– Trước đây ADO luôn phải duy trì kết nối trong quá trình làm việc.

14

Page 15: Cs06

Lập trình Windows Form với C#

Lương Tr ần Hy Hi ến © 2010 Khoa CNTT – ĐH Sư Phạm TpHCM

Môi tr ường “ connected ”

�Mỗi user có m ột kết nối cố định tới data source

�Ưu điểm

– Môi trường được bảo vệ tốt

– Kiểm soát được sự đồng bộ

– Dữ liệu luôn được mới

�Nhược

– Phải có một kết nối mạng cố định

– Scalability15

Page 16: Cs06

Lập trình Windows Form với C#

Lương Tr ần Hy Hi ến © 2010 Khoa CNTT – ĐH Sư Phạm TpHCM

Môi tr ường “ disconnected ”�Một tập con c ủa dữ liệu trung tâm được sao

chép và b ổ sung độc lập, sau đó sẽ được merge l ại vào d ữ liệu trung tâm.

�Ưu điểm– Có thể làm việc bất cứ lúc nào, cũng như có thể kết nối

bất kỳ vào Data Source

– Cho phép user khác có thể kết nối

– Nâng cao hiệu suất thực hiện của ứng dụng

�Khuy ết– Dữ liệu không được cập nhật một cách nhanh nhất

– Sự tranh chấp có thể xuất hiện và phải giải quyết

16

Page 17: Cs06

Lập trình Windows Form với C#

Lương Tr ần Hy Hi ến © 2010 Khoa CNTT – ĐH Sư Phạm TpHCM

ADO.NET

�ADO.NET mạnh mẽ

– Kế thừa các ưu điểm của ADO

– Kết hợp với ý tưởng thiết kế hoàn toàn mới

�Đặc điểm nổi bật

– Thiết kế hoàn toàn dựa vào XML

• Chuẩn giao tiếp dữ liệu tốt nhất trên môi trường Internet hiện nay

– Thiết kế hoàn toàn hướng đối tượng

• Đặc trưng của thư viện .NET Framework

17

Page 18: Cs06

Lập trình Windows Form với C#

Lương Tr ần Hy Hi ến © 2010 Khoa CNTT – ĐH Sư Phạm TpHCM

ADO.NET vs. ADO

Đặc Điểm ADO ADO.NET

DL xử lý được đưa vào bộ nhớ dưới dạng

Recordset : tương đương 1 bảng dữ liệu trong database

Dataset : tương đương 1 database

Duyệt dữ liệu Recordset chỉ cho phép duyệt tuần tự, từng dòng một.

Dataset : duyệt “t ự do, ngẫu nhiên”, truy cập thẳng tới bảng, dòng ,cột mong muốn.

Dữ liệu ngắt kết nối

Recordset thiên về hướng kết nối, nên việc hỗ trợ ngắt kết nối không mạnh

Dataset hỗ trợ hoàn toàn ngắt kết nối

Trao đổi dữ liệu qua Internet

Khả năng trao đổi dữ liệu ADO qua Internet thường có nhiều hạn chế. Do dùng chuẩn COM

ADO.NET trao đổi dữ liệu qua Internet r ất dễ dàng vì ADO.NET được thiết kế theo chuẩn XML, là chuẩn dữ liệu chính được sử dụng để trao đổi trên Internet.

Page 19: Cs06

Lập trình Windows Form với C#

Lương Tr ần Hy Hi ến © 2010 Khoa CNTT – ĐH Sư Phạm TpHCM

ADO.NET

� Kiến trúc c ủa ADO.NET gồm 2 phần chính� Phần kết nối: sử dụng khi k ết nối CSDL và thao

tác dữ liệu, phải thực hi ện kết nối khi thao tác• Connection : quản lý việc đóng mở DB

– ???Connection : SqlConnection, OleDbConnection

• Command : lệnh truy vấn, tương tác dữ liệu khi đang lập kết nối

– ???Command : SqlCommand, OleDbCommand

• DataReader : đọc dữ liệu, chỉ xử lý 1 dòng dữ liệu tại một thời điểm

– ???DataReader : SqlDataReader, OleDbDataReader

• DataAdapter : cầu nối giữa DataBase và DataSet

19

Page 20: Cs06

Lập trình Windows Form với C#

Lương Tr ần Hy Hi ến © 2010 Khoa CNTT – ĐH Sư Phạm TpHCM

ADO.NET

�Phần ngắt kết nối: là DataSet– DataSet không quan tâm đến Database thuộc kiểu

gì, mà lấy dữ liệu từ DataAdapter để xử lý– DataSet xem như một Database trong bộ nhớ: bảng,

quan hệ…– DataSet có các thành phần con như

• DataTable• DataRow• DataColumn• DataRelation• Các đối tượng nhóm: DataTableCollection,

DataRowCollection, DataColumnCollection

20

Page 21: Cs06

Lập trình Windows Form với C#

Lương Tr ần Hy Hi ến © 2010 Khoa CNTT – ĐH Sư Phạm TpHCM

Mô h ình đối tượng ADO.NET

21

Page 22: Cs06

Lập trình Windows Form với C#

Lương Tr ần Hy Hi ến © 2010 Khoa CNTT – ĐH Sư Phạm TpHCM

Namespace� System.Data — All generic data access classes

� System.Data.Common — Classes shared (or overridden) by individual data providers

� System.Data.Odbc — ODBC provider classes

� System.Data.OleDb — OLE DB provider classes

� System.Data.ProviderBase — New base classes and connection factory classes

� System.Data.Oracle — Oracle provider classes

� System.Data.Sql — New generic interfaces and classes for SQL Server data access

� System.Data.SqlClient — SQL Server provider classes

� System.Data.SqlTypes — SQL Server data types22

Page 23: Cs06

Lập trình Windows Form với C#

Lương Tr ần Hy Hi ến © 2010 Khoa CNTT – ĐH Sư Phạm TpHCM

Các lớp thư viện ADO.NET

� System.Data. OleDb: Access, SQL Server, Oracle

� System.Data. SqlClient : SQL Server

� System.Data. OracleClient : Oracle

� Đặc điểm:– Cả ba thư viện trên về giao tiếp lập trình là giống nhau

– Dùng thư viện SqlClient truy xuất SQL Server nhanh hơn OleDb

– Tương tự cho OracleClient

23

Page 24: Cs06

Lập trình Windows Form với C#

Lương Tr ần Hy Hi ến © 2010 Khoa CNTT – ĐH Sư Phạm TpHCM

.NET Data Provider

�Các thành ph ần .NET Data Provider

24

Page 25: Cs06

Lập trình Windows Form với C#

Lương Tr ần Hy Hi ến © 2010 Khoa CNTT – ĐH Sư Phạm TpHCM

Connected Model

�Kết nối vào CSDL

� Thực hi ện lệnh

– Thêm/Xóa/Sửa dữ liệu

–Đọc dữ liệu từ CSDL

25

Page 26: Cs06

Lập trình Windows Form với C#

Lương Tr ần Hy Hi ến © 2010 Khoa CNTT – ĐH Sư Phạm TpHCM

Connected Model

� Kết nối vào CSDL– Các lớp phụ trách kết nối

• ODBCConnection• OleDBConnection• SqlConnection• OracleConnection

– Thuộc tính quan trọng

• ConnectionString: xác định nguồn dữ liệu cần kết nối

– Phương thức quan trọng

• Open: mở kết nối• Close: đóng kết nối

26

Page 27: Cs06

Lập trình Windows Form với C#

Lương Tr ần Hy Hi ến © 2010 Khoa CNTT – ĐH Sư Phạm TpHCM

.NET Data Provider - Connection

�Các đối tượng Connection tuân th ủ IDbConnection interface.�ConnectionString: loại Data Source cần kết nối.�Open(): thiết lập kết nối đến Data Source.�Close(): ngắt kết nối đến Data Source.

Data SourceApplication

Connection

27

Page 28: Cs06

Lập trình Windows Form với C#

Lương Tr ần Hy Hi ến © 2010 Khoa CNTT – ĐH Sư Phạm TpHCM

.NET Data Provider – Connection (cont)

�Kết nối vào CSDL AccessOleDbConnection cnn = new OleDbConnection();

cnn.ConnectionString = "Provider=Microsoft.Jet.OleDb.4.0;

Data Source=QLHS.mdb";

cnn.Open();

//Các lệnh cần thực hiện

cnn.Close();

28

Page 29: Cs06

Lập trình Windows Form với C#

Lương Tr ần Hy Hi ến © 2010 Khoa CNTT – ĐH Sư Phạm TpHCM

.NET Data Provider – Connection (cont)

�Kết nối vào CSDL SQL Server:

SqlConnection cnn = new SqlConnection(“server= HIENLTH-PC\\SQLEXPRESS; database = QLHS; user id=sa; password=sa”);

cnn.Open();

// Thực hiện truy vấn dữ liệu

cnn.Close();

29

Page 30: Cs06

Lập trình Windows Form với C#

Lương Tr ần Hy Hi ến © 2010 Khoa CNTT – ĐH Sư Phạm TpHCM

SQL2005 ConnectionString

� Theo đặc quy ền của SQL Server (có user, pass):

server= HIENLTH-PC\SQLEXPRESS; database = QLHS; user id=sa; password=sa

� Theo đặc quy ền của hệ điều hành:

server= HIENLTH-PC\SQLEXPRESS; database = QLHS; Trusted Connection = True;

server= HIENLTH-PC\SQLEXPRESS; database = QLHS; Integrated Security = True;

30

Page 31: Cs06

Lập trình Windows Form với C#

Lương Tr ần Hy Hi ến © 2010 Khoa CNTT – ĐH Sư Phạm TpHCM

Tập tin l ưu trữ kết nối

� Cho phép người dùng có thể cấu hình các giá trị thuộc tính cho chuỗi kết nối CSDL.

� Thường có dạng *.ini, *.txt. Từ .NET 1.0 trở lên có thể sử dụng tập tin App.config (định dạng XML) chứa khai báo các tham số cùng giá trị và các chỉ thị khác.

� Ví dụ: Tập tin DBConfig.ini

31

Page 32: Cs06

Lập trình Windows Form với C#

Lương Tr ần Hy Hi ến © 2010 Khoa CNTT – ĐH Sư Phạm TpHCM

Đọc thông tin t ập tin l ưu trữ kết nối

� Loại *.ini, *.txt s ử dụng StreamReader (using System.IO)

StreamReader docfile = new StreamReader (@"DBConfig.ini");

servername = Tach(docfile. ReadLine ());

databasename = Tach(docfile. ReadLine ());

username = Tach(docfile. ReadLine ());

password = Tach(docfile. ReadLine ());

32

Page 33: Cs06

Lập trình Windows Form với C#

Lương Tr ần Hy Hi ến © 2010 Khoa CNTT – ĐH Sư Phạm TpHCM

Đọc thông tin t ập tin l ưu trữ kết nối

� Loại App.config<?xml version="1.0" encoding="utf-8" ?>

<configuration>

<connectionStrings>

<add name="SqlServer" connectionString="server=HIENLTH-PC\sqlexpress;database=SEQLHS;integrated security=true" providerName="System.Data.SqlClient"/>

</connectionStrings>

</configuration>

33

Page 34: Cs06

Lập trình Windows Form với C#

Lương Tr ần Hy Hi ến © 2010 Khoa CNTT – ĐH Sư Phạm TpHCM

Đọc thông tin t ập tin l ưu trữ kết nối

� Loại App.config :

connectionstring = ConfigurationManager.ConnectionStrings[tên].

ConnectionString;

Ví dụ:

con.ConnectionString = ConfigurationManager.ConnectionStrings[“SqlServer "].

ConnectionString;

34

Page 35: Cs06

Lập trình Windows Form với C#

Lương Tr ần Hy Hi ến © 2010 Khoa CNTT – ĐH Sư Phạm TpHCM

.NET Data Provider - Command

Data SourceApplication

Connection 011010011011010011

Command

35

Page 36: Cs06

Lập trình Windows Form với C#

Lương Tr ần Hy Hi ến © 2010 Khoa CNTT – ĐH Sư Phạm TpHCM

.NET Data Provider - Command

� Các đối tượng Command tuân th ủ IDbCommand interface.�Connection: kết nối dùng để thực hiện câu lệnh.�CommandText: câu lệnh SQL cần thực hiện trên Data Source.�CommandType: loại câu lệnh trong CommandText (Text,

TableDirect, StoredProc).�ExecuteScalar(): thực hiện câu lệnh trong CommandText, kết

quả trả về là một giá trị đơn.�ExecuteNonQuery(): thực hiện câu lệnh trong CommandText và

không có kết quả trả về.�ExecuteReader(): thực hiện câu lệnh trong CommandText, kết

quả trả về là một DataReader.

36

Page 37: Cs06

Lập trình Windows Form với C#

Lương Tr ần Hy Hi ến © 2010 Khoa CNTT – ĐH Sư Phạm TpHCM

Command (cont) – SQL Server

SqlConnection cnn = new SqlConnection(“server=HIENL TH-PC\\SQLEXPRESS; database=QLHS; user id=sa; password =sa”);

SqlCommand cmd = new SqlCommand();

cmd. Connection = cnn;

cmd. CommandText = “SELECT COUNT(*) FROM HocSinh”;

cmd. CommandType = CommandType.Text;

cnn. Open();

int count = (int)cmd.ExecuteScalar();

cnn.Close();

37

Page 38: Cs06

Lập trình Windows Form với C#

Lương Tr ần Hy Hi ến © 2010 Khoa CNTT – ĐH Sư Phạm TpHCM

Command (cont) – SQL Server

SqlConnection cnn = new SqlConnection(“server=HIENLTH-PC\SQLEXPRESS; database=QLHS; user id=sa; password=sa”);

SqlCommand cmd = new SqlCommand();

cmd.Connection = cnn;

cmd.CommandText =

“INSERT INTO HocSinh(Ho, Ten, DienThoai) VALUES(N‘Nguyễn Văn’, N‘Trường’, ‘0989366990’)”;

cmd.CommandType = CommandType.Text;

cnn.Open();

cmd.ExecuteNonQuery();

cnn.Close();38

Page 39: Cs06

Lập trình Windows Form với C#

Lương Tr ần Hy Hi ến © 2010 Khoa CNTT – ĐH Sư Phạm TpHCM

Command (cont) – MS Access

� Thực hi ện lệnh

– Thêm/Xóa/Sửa dữ liệu

Ví dụ:

OleDbCommand cmd = new OleDbCommand();

cmd.Connection = cnn;

cmd.CommandText = “INSERT INTO Hocsinh VALUES(5, 'Lê Văn Xiêm','11/12/2006', 'Khánh Hòa', '221 Nguy ễn Văn Cừ')" ;

cmd.ExecuteNonQuery();

39

Page 40: Cs06

Lập trình Windows Form với C#

Lương Tr ần Hy Hi ến © 2010 Khoa CNTT – ĐH Sư Phạm TpHCM

.NET Data Provider - Parameter

�Mục đích sử dụng:�Một vài giá trị trong câu lệnh chỉ biết khi thực hiện

câu lệnh.�Cần thực hiện câu lệnh nhiều lần với các giá trị

khác nhau.

�Các bước thực hi ện:�Tham số hóa câu lệnh: ? hoặc @[tên tham số].�Tạo các parameters tương ứng cho command.�Đặt giá trị cho các parameter mỗi khi dùng

command thực hiện câu lệnh.

40

Page 41: Cs06

Lập trình Windows Form với C#

Lương Tr ần Hy Hi ến © 2010 Khoa CNTT – ĐH Sư Phạm TpHCM

.NET Data Provider – Parameter(cont)

� Tham số hóa�SQL Data Provider:

cmd.CommandText =“SELECT * FROM HocSinh WHERE tenhocsinh = @ten”;

cmd.CommandText =“INSERT INTO HocSinh(id_hocsinh, tenhocsinh, dtb)” +“ VALUES(@id, @ten, @dtb)”;

�Các provider khác:cmd.CommandText =

“SELECT * FROM HocSinh WHERE tenhocsinh = ?”;

cmd.CommandText =“INSERT INTO HocSinh(id_hocsinh, tenhocsinh, dtb)” +“VALUES(?, ?, ?)”;

41

Page 42: Cs06

Lập trình Windows Form với C#

Lương Tr ần Hy Hi ến © 2010 Khoa CNTT – ĐH Sư Phạm TpHCM

.NET Data Provider – Parameter(cont)

� Tạo các parametercmd.Parameters.Add(“@id”, 5);

cmd.Parameters.Add(“@ten”, “Nguyễn Văn A”);

cmd.Parameters.Add(“@dtb”, 8.5);

� Đặt giá tr ị cho các parameterforeach (Student s in studentList)

{

cmd.Parameters[“@id”] = i;

cmd.Parameters[“@ten”] = s.studentName;

cmd.Parameters[“@dtb”] = s.studentMarks;

cmd.ExecuteNonQuery();

}42

Page 43: Cs06

Lập trình Windows Form với C#

Lương Tr ần Hy Hi ến © 2010 Khoa CNTT – ĐH Sư Phạm TpHCM

Parameter(cont) – MS Access� Ví dụ

OleDbCommand cmd = new OleDbCommand();cmd.Connection = cnn;cmd.CommandText = "INSERT INTO Hocsinh VALUES

(@Ma,@Ten,@Diachi,@NgaySinh,@Toan,@Van)“;OleDbParameter para=cmd.Parameters.Add("@Ma",OleDbT ype.Integer);para.Value=1;para=cmd.Parameters.Add("@Ten",OleDbType.VarWChar);para.Value= N"Lê V ăn A";para=cmd.Parameters.Add("@Diachi",OleDbType.VarWCha r);para.Value= N"Nguy ễn Văn Cừ";para = cmd.Parameters.Add("@Ngaysinh", OleDbType.Da te);para.Value = new DateTime(1982,10,1);para=cmd.Parameters.Add("@Toan",OleDbType.Integer);para.Value=5;para=cmd.Parameters.Add("@Van",OleDbType.Integer);para.Value=7;

cmd.ExecuteNonQuery();

43

Page 44: Cs06

Lập trình Windows Form với C#

Lương Tr ần Hy Hi ến © 2010 Khoa CNTT – ĐH Sư Phạm TpHCM

.NET Data Provider – DataReader

MaHS HoTen DiaChi

i HocSinh I DiaChi i

Data SourceApplication

Connection

Command

DataReader

ExecuteReader()

Read()

011010011011010011

Page 45: Cs06

Lập trình Windows Form với C#

Lương Tr ần Hy Hi ến © 2010 Khoa CNTT – ĐH Sư Phạm TpHCM

.NET Data Provider – DataReader

�DataReader là gì?

– Chỉ di chuyển tới phía trước, chỉ đọc

– truy cập dữ liệu nhanh,

– kết nối đến nguồn dữ liệu (data source)

– Quản lý dữ liệu, hoặc ràng buộc vào điều khiển list-bound

– Sử dụng tài nguyên

45

Page 46: Cs06

Lập trình Windows Form với C#

Lương Tr ần Hy Hi ến © 2010 Khoa CNTT – ĐH Sư Phạm TpHCM

.NET Data Provider - DataReader

�Các đối tượng DataReader tuân th ủ interface IDataReader.�HasRow: cho biết còn dữ liệu để đọc nữa không.�Read(): đọc một mẫu tin vào DataReader.�Toán tử [ i ]: truy xuất đến cột i trong mẫu tin đọc được.�Close(): đóng DataReader.

� Lưu ý:�Truy xuất tuần tự và không quay lui.�Không cập nhật dữ liệu.�Cơ chế kết nối.

46

Page 47: Cs06

Lập trình Windows Form với C#

Lương Tr ần Hy Hi ến © 2010 Khoa CNTT – ĐH Sư Phạm TpHCM

.NET Data Provider – DataReader (cont)

SqlConnection cnn = new SqlConnection(“server=localhost; database=Northwind; user id=sa; password=sa”);

SqlCommand cmd = new SqlCommand();cmd.Connection = cnn;cmd.CommandText = “select * from Orders”;cmd.CommandType = CommandType.Text;

cnn.Open();SqlDataReader dr = cmd.ExecuteReader();

while (dr.Read()){

MessageBox.Show(dr[“CustomerID”].ToString());}

dr.Close();cnn.Close();

47

Page 48: Cs06

Lập trình Windows Form với C#

Lương Tr ần Hy Hi ến © 2010 Khoa CNTT – ĐH Sư Phạm TpHCM

DataReader (cont) – MS Access

� Thực hi ện lệnh– Đọc dữ liệu từ CSDL

– Ví dụ

OleDbDataReader rd = cmd.ExecuteReader();

while (rd.Read())

{

if (!rd.IsDBNull(3))

MessageBox.Show(dr[“CustomerID”].ToString());

}

48

Page 49: Cs06

Lập trình Windows Form với C#

Lương Tr ần Hy Hi ến © 2010 Khoa CNTT – ĐH Sư Phạm TpHCM

.NET Data Provider - SqlDataAdapter

�Bộ đọc dữ liệu từ CSDL ngu ồn (SQLServer) và đổ vào đối tượng DataSet hay DataTable.

�Phân trang d ữ liệu

�Phương th ức:– Fill(datasource)

– Fill(datasource, start, number, “tablename”)

49

Page 50: Cs06

Lập trình Windows Form với C#

Lương Tr ần Hy Hi ến © 2010 Khoa CNTT – ĐH Sư Phạm TpHCM

.NET Data Provider - DataAdapter

� Các đối tượng DataAdapter tuân th ủ interface IDbDataAdapter.�Fill(DataSet): dùng SelectCommand lấy dữ liệu từ Data Source đổ vào DataSet.

�Update(DataSet): dùng InsertCommand, UpdateCommand và DeleteCommand cập nhật dữ liệu trong DataSet vào Data Source.

SelectCommand

UpdateCommand

InsertCommand

DeleteCommand

DataAdapter

Data Source

DataSet

50

Page 51: Cs06

Lập trình Windows Form với C#

Lương Tr ần Hy Hi ến © 2010 Khoa CNTT – ĐH Sư Phạm TpHCM

.NET Data Provider – DataAdapter (cont)

SqlConnection cnn = new SqlConnection(“server=localhost; database=Northwind; user id=sa; password=sa”);

SqlDataAdapter da = new SqlDataAdapter(“select * from Orders”, cnn)

DataSet ds = new DataSet();

da.Fill(ds);

// Does something on the DataSet.

da.Update(ds);

51

Page 52: Cs06

Lập trình Windows Form với C#

Lương Tr ần Hy Hi ến © 2010 Khoa CNTT – ĐH Sư Phạm TpHCM

Nội dung

�Sơ lược l ịch sử phát tri ển

�Kiến trúc ADO.NET

� .NET Data Provider

�DataSet

�Hỏi & Đáp

52

Page 53: Cs06

Lập trình Windows Form với C#

Lương Tr ần Hy Hi ến © 2010 Khoa CNTT – ĐH Sư Phạm TpHCM

System.Data namespace� DataSet — This object is designed for disconnected use and c an

contain a set of DataTables and include relationshi ps between these tables.

� DataTable — A container of data that consists of one or more DataColumns and, when populated, will have one or m ore DataRows containing data.

� DataRow — A number of values, akin to a row from a database table, or a row from a spreadsheet.

� DataColumn — This object contains the definition of a column, s uch as the name and data type.

� DataRelation — A link between two DataTable classes within a Data Set class. Used for foreign key and master/detail relat ionships.

� Constraint — This class defines a rule for a DataColumn class ( or set of data columns), such as unique values.

53

Page 54: Cs06

Lập trình Windows Form với C#

Lương Tr ần Hy Hi ến © 2010 Khoa CNTT – ĐH Sư Phạm TpHCM

DataSet

� DataSet là c ơ sở dữ liệu được lưu trữ trong b ộ nhớ chính (in-memory database).

� Cơ chế không k ết nối.

� Gồm các đối tượng– DataTable

– DataRelation

Data Source

DataSet

� DataSet là gì?

Ánh xạ

54

Page 55: Cs06

Lập trình Windows Form với C#

Lương Tr ần Hy Hi ến © 2010 Khoa CNTT – ĐH Sư Phạm TpHCM

DataSet (cont)

DataSet

DataTable

Columns

Rows

DataColumn

DataRow

Tables

Relations DataRelation

55

Page 56: Cs06

Lập trình Windows Form với C#

Lương Tr ần Hy Hi ến © 2010 Khoa CNTT – ĐH Sư Phạm TpHCM

Các phương th ức của DataSet

� Thêm 1 đối tượng DataTable: ds.Tables. Add (datatable_name);

� Xóa 1 đối tượng:– ds.Tables.Remove(datatable_name);– ds.Table.RemoveAt(datatable_index);

� Loại bỏ tất cả DataTable: ds.Tables. Clear();� Kiểm tra t ồn tại:

ds.Tables. Contains (datatable_name);� Kiểm tra t ồn tại và có th ể xóa được:

ds.Tables. CanRemove (datatable_name);� Đếm số lượng DataTable: ds.Tables. Count (thuộc

tính)

56

Page 57: Cs06

Lập trình Windows Form với C#

Lương Tr ần Hy Hi ến © 2010 Khoa CNTT – ĐH Sư Phạm TpHCM

Các phương th ức của DataSet

�Ghi ra file XML: ds. WriteXml (ten_file_xml);

�Đọc từ file XML: ds. ReadXml (ten_file_xml);

57

Page 58: Cs06

Lập trình Windows Form với C#

Lương Tr ần Hy Hi ến © 2010 Khoa CNTT – ĐH Sư Phạm TpHCM

DataSet - DataTable

�DataTable th ể hiện một bảng trong c ơ sở dữ liệu.

�Gồm các đối tượng:– DataColumn– DataRow

�Các thu ộc tính và ph ương th ức:�TableName: tên bảng.�Columns: danh sách các cột (DataColumn).�Rows: danh sách các mẫu tin (DataRow).�PrimaryKey: danh sách các cột làm khóa chính

(DataColumn).�NewRow(): tạo một mẫu tin mới.

58

Page 59: Cs06

Lập trình Windows Form với C#

Lương Tr ần Hy Hi ến © 2010 Khoa CNTT – ĐH Sư Phạm TpHCM

DataSet - DataColumn

�DataColumn th ể hiện một cột trong b ảng.

�Các thu ộc tính và ph ương th ức:�ColumnName: tên cột.�DataType: kiểu dữ liệu cột.

59

Page 60: Cs06

Lập trình Windows Form với C#

Lương Tr ần Hy Hi ến © 2010 Khoa CNTT – ĐH Sư Phạm TpHCM

DataSet - DataRow

�DataRow th ể hiện một mẫu tin trong b ảng.

�Các thu ộc tính và ph ương th ức:�RowState: trạng thái của mẫu tin (Added,

Modified, Deleted, Unchanged, Detach).�Toán tử [i]: truy xuất đến cột i của mẫu tin.�Delete(): đánh dấu xóa mẫu tin.

60

Page 61: Cs06

Lập trình Windows Form với C#

Lương Tr ần Hy Hi ến © 2010 Khoa CNTT – ĐH Sư Phạm TpHCM

DataSet (cont)

DataTable table = new DataTable(“SinhVien”);

table.Columns.Add(new DataColumn(“MSSV”, Type.GetType (“Int32”));

table.Columns.Add(new DataColumn(“HoTen”, Type.GetTyp e(“string”));

table.PrimaryKey = new DataColumn[] { table.Columns [“MSSV”] };

DataRow row = table.NewRow();

row[“MSSV”] = 123;

row[“HoTen”] = “Nguy ễn Văn A”;

table.Rows.Add(row);

61

Page 62: Cs06

Lập trình Windows Form với C#

Lương Tr ần Hy Hi ến © 2010 Khoa CNTT – ĐH Sư Phạm TpHCM

DataSet (cont)

SqlConnection cnn = new SqlConnection(“server=HIENLTH-PC\SQLEXPRESS; database=Northwind; user id=sa; password=sa”);

SqlDataAdapter da = new SqlDataAdapter(“select * fr om Orders”, cnn)

DataSet ds = new DataSet();

da.Fill(ds);foreach (DataRow row in ds.Tables[0].Rows)

row[“OrderDate”] = DateTime.Now;da.Update(ds);

62

Page 63: Cs06

Lập trình Windows Form với C#

Lương Tr ần Hy Hi ến © 2010 Khoa CNTT – ĐH Sư Phạm TpHCM

DataSet (cont)

SqlConnection cnn = new SqlConnection(“server=HIENL TH-PC\SQLEXPRESS; database=Northwind; user id=sa; password=sa”);

SqlDataAdapter da = new SqlDataAdapter(“select * fr om Orders”, cnn)

DataSet ds = new DataSet();

da.Fill(ds);

foreach (DataRow row in ds.Tables[0].Rows)

if (row[“CustomerID”].ToString() == “Nguy ễn Văn A”)

row.Delete();

da.Update(ds);63

Page 64: Cs06

Lập trình Windows Form với C#

Lương Tr ần Hy Hi ến © 2010 Khoa CNTT – ĐH Sư Phạm TpHCM

DataSet (cont)

�So sánh DataSet và DataReader:�Tốc độ truy xuất.�Bô nhớ lưu trữ.�Thuận tiện trong thao tác.�Cơ chế kết nối và không kết nối.

64

Page 65: Cs06

Lập trình Windows Form với C#

Lương Tr ần Hy Hi ến © 2010 Khoa CNTT – ĐH Sư Phạm TpHCM

DataSet (cont) – MS Access

� Đọc dữ liệu từ CSDL

OleDbDataAdapter da = new OleDbDataAdapter(

"select * from HocSinh", cnn);

DataSet dsHocSinh= new DataSet();

da.Fill(dsHocSinh, "HocSinh");

for (int i = 0; i < dsHocSinh.Tables ["HocSinh"].Rows.Count; i++)

{

listBox1.Items.Add(

dsHocSinh.Tables["HocSinh"].Rows[i]["HoTen"].ToStri ng());

}65

Page 66: Cs06

Lập trình Windows Form với C#

Lương Tr ần Hy Hi ến © 2010 Khoa CNTT – ĐH Sư Phạm TpHCM

DataSet (cont) – MS Access

� Xử lý dữ liệu– Thêm dữ liệu

DataRow newRow;newRow=dsHocSinh.Tables["HocSinh"].NewRow();newRow[0] = 10;newRow[1] = "Lê Thị B";dsHocSinh.Tables["HocSinh"].Rows.Add(newRow);

– Xoá dữ liệudsHocSinh.Tables["HocSinh"].Rows[0].Delete();

– Thay đổi dữ liệuDataRow row = dsHocSinh.Tables["HocSinh"].Rows[1];row.BeginEdit();row[0] = 11; row[1] = "Lê Thị C";row.EndEdit();

66

Page 67: Cs06

Lập trình Windows Form với C#

Lương Tr ần Hy Hi ến © 2010 Khoa CNTT – ĐH Sư Phạm TpHCM

DataSet (cont) – MS Access

�Cập nhật dữ liệu xuống CSDL

OleDbCommandBuilder buider =

new OleDbCommandBuilder(da);

da.Update(dsHocSinh, "HocSinh");

67

Page 68: Cs06

Bài giảng môn học

Lập trình Windows Form v ới C#

Trình bày d ữ liệu

Page 69: Cs06

Lập trình Windows Form với C#

Lương Tr ần Hy Hi ến © 2010 Khoa CNTT – ĐH Sư Phạm TpHCM

Nhắc lại SqlDataAdapter

� SqlDataAdapter được dùng để điền dữ liệu vào đối tượng DataSet, DataTable và c ập nhật dữ liệu từ hai đối tượng này trở lại dữ liệu ngu ồn.

� Các trường hợp tạo đối tượng SqlDataAdapter:– SqlDataAdapter(string SQL, SqlConnection cnn);– SqlDataAdapter(SqlCommand cmd);

� Điền dữ liệu:– sqlDataAdapter.Fill(datasetname);– sqlDataAdapter.Fill(datatable);– sqlDataAdapter(DataSet dataset, int start, int end);– sqlDataAdapter(int start, int end, DataTable datatable);

Phân trang

69

Page 70: Cs06

Lập trình Windows Form với C#

Lương Tr ần Hy Hi ến © 2010 Khoa CNTT – ĐH Sư Phạm TpHCM

Cập nhật dữ liệu từ DataAdapter

� Trong Form khai báo các thu ộc tính là đối tượng DataSet (hay DataTable)

� Lấy dữ liệu: Đổ dữ liệu vào DataSetdataAdapter. Fill (dataset);

�Cập nhật dữ liệu: Cập nhật dữ liệu từ DataSet vào CSDL

dataAdapter. Update (dataset);

70

Page 71: Cs06

Lập trình Windows Form với C#

Lương Tr ần Hy Hi ến © 2010 Khoa CNTT – ĐH Sư Phạm TpHCM

DataView

� Thể hiện của 1 DataTable.

� Đóng vai trò quan tr ọng trong DataBinding

� 1 DataTable có th ể có nhi ều View khác nhau

� Dùng để trình bày d ữ liệu dưới hình th ức lọc, sắp xếp, tìm ki ếm, hi ệu ch ỉnh và điều hướng dữ liệu trong DataTable

DataTable

DataViewDataViewDataView

71

Page 72: Cs06

Lập trình Windows Form với C#

Lương Tr ần Hy Hi ến © 2010 Khoa CNTT – ĐH Sư Phạm TpHCM

Khai báo DataView

�Có thể sử dụng các cú pháp sau:

– dataView = new DataView();dataView.Table = dataTable;

– dataView = new DataView(dataTable);

– dataView = new DataView(dataTable, sortFilter, sortString, DataViewRowState);

72

Page 73: Cs06

Lập trình Windows Form với C#

Lương Tr ần Hy Hi ến © 2010 Khoa CNTT – ĐH Sư Phạm TpHCM

DataView

Tên Ý nghĩa

AllowDelete Cho phép xóa trên thể hiện

AllowEdit Cho phép chỉnh sửa

AllowNew Cho phép thêm mới

Item (index) Lấy giá trị value tại column có chỉ số index

RowFilter Thiết lập Expression dùng để lọc row

Sort Sắp xếp tăng hoặc giảm theo column

Table Cho biết view này được tạo bởi table nào

Count Lấy số lượng mẫu tin có trong DataView

Danh sách các thu ộc tính

73

Page 74: Cs06

Lập trình Windows Form với C#

Lương Tr ần Hy Hi ến © 2010 Khoa CNTT – ĐH Sư Phạm TpHCM

DataView

Tên Ý nghĩa

AddNew Thêm mới 1 mẫu tin

Delete(index) Xóa mẫu tin thứ index

Danh sách các ph ương th ức

74

Page 75: Cs06

Lập trình Windows Form với C#

Lương Tr ần Hy Hi ến © 2010 Khoa CNTT – ĐH Sư Phạm TpHCM75

Page 76: Cs06

Lập trình Windows Form với C#

Lương Tr ần Hy Hi ến © 2010 Khoa CNTT – ĐH Sư Phạm TpHCM

DataBinding

�Hiển th ị dữ liệu trong DataTable, … vào các control (TextBox, ComboBox, DataGrid, …)

�Gồm 2 loại:– Simple Binding– Complex Binding

�Ví dụ: Điền nội dung b ảng TonGiao vào ComboBox Tôn Giáo

DataTable bang = ketnoi.GetDataTable(“SELECT * FROM TonGiao”);

cboTonGiao. DataSource = bang;cboTonGiao. DisplayMember =

bang.Columns[ 1].ToString();//TenTGcboTonGiao. SelectedValue =

bang.Columns[ 0].ToString();//MaTG

76

Page 77: Cs06

Lập trình Windows Form với C#

Lương Tr ần Hy Hi ến © 2010 Khoa CNTT – ĐH Sư Phạm TpHCM

Đưa dữ liệu vào l ưới DataGridView

77

Page 78: Cs06

Lập trình Windows Form với C#

Lương Tr ần Hy Hi ến © 2010 Khoa CNTT – ĐH Sư Phạm TpHCM

Điền dữ liệu vào DataGridView

� datagridview. DataSource = datatable;

� datagridview. DataSource = dataset. Tables [index];

78

Page 79: Cs06

Lập trình Windows Form với C#

Lương Tr ần Hy Hi ến © 2010 Khoa CNTT – ĐH Sư Phạm TpHCM

DataGridView (tt)

�Các thu ộc tính c ủa DataGridView:

– DataSource : điền dữ liệu vào DataGridView

– CurrentRow : lấy mẫu tin đang chọn

– CurrentCell : lấy ô đang chọn

�Các bi ến cố (Event) c ủa DataGridView:

– SelectionChanged : xảy ra khi người dùng di chuyển vào vùng dữ liệu

– DoubleClick

79

Page 80: Cs06

Lập trình Windows Form với C#

Lương Tr ần Hy Hi ến © 2010 Khoa CNTT – ĐH Sư Phạm TpHCM

Nội dung

�Sơ lược l ịch sử phát tri ển

�Kiến trúc ADO.NET

� .NET Data Provider

�DataSet

�Hỏi & Đáp

80

Page 81: Cs06

Lập trình Windows Form với C#

Lương Tr ần Hy Hi ến © 2010 Khoa CNTT – ĐH Sư Phạm TpHCM

Tham kh ảo

�Bài gi ảng ADO.NET c ủa thầy Nguy ễn Minh Huy, ĐH KHTN TpHCM

�MSDN

81

Page 82: Cs06

Lập trình Windows Form với C#

Lương Tr ần Hy Hi ến © 2010 Khoa CNTT – ĐH Sư Phạm TpHCM82