101
1 ADO.NET ADO.NET ThS. Nguyễn Thị Thu Dự

Du@Chuong 7 - ADO

Embed Size (px)

Citation preview

Page 1: Du@Chuong 7 - ADO

1

ADO.NETADO.NET

ThS. Nguyễn Thị Thu Dự

Page 2: Du@Chuong 7 - ADO

Tổng quan ADO.NETTổng quan ADO.NET

Storedinto

Database (Oracle, SQL Server)

Client

ADO.NETData access technology

2

Page 3: Du@Chuong 7 - ADO

3

Nội DungNội Dung

ADO.NETADO.NET Quá trình phát triển Đặc điểm ADO.NET .NET Data Provider DataSet Data Source Configuration Wizard

Page 4: Du@Chuong 7 - ADO

4

Giới thiệu ADO.NETGiới thiệu ADO.NET

AActiveX DData OObject .NET (ADO.NET) Công nghệ của MS trên .NET Framework 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.NET Application

ADO.NETADO.NET

Page 5: Du@Chuong 7 - ADO

5

Giới thiệu ADO.NETGiới thiệu ADO.NET

Mô hình .NET Framework

Microsoft .NET Framework

Common Language Runtime

Base Classes

Web Services User Interface

Data and XML

ADO.NETADO.NET XML ... ...

Page 6: Du@Chuong 7 - ADO

6

Nội DungNội Dung

ADO.NET Quá trình phát triểnQuá trình phát triển Đặc điểm ADO.NET .NET Data Provider DataSet Data Source Configuration Wizard

Page 7: Du@Chuong 7 - ADO

Quá trình phát triểnQuá trình phát triển

Lịch sử phát triển công nghệ kết nối cơ sở dữ liệu ODBC DAO RDO OLE DB ADO ADO.NET

So sánh ADO v.s ADO.NET

ADO ADO.NET

Online Online và Offline

Một bảng Nhiều bảng

Binary XML

7

Page 8: Du@Chuong 7 - ADO

8

Quá trình phát triểnQuá trình phát triển

Native API

ODBC

Application

Database

DB API

Application

ODBC

DriverDriver

DriverDriver

DriverDriver

Database

ODBC API

DB API

Page 9: Du@Chuong 7 - ADO

9

ADOOLE DB

Quá trình phát triểnQuá trình phát triển

ADO, OLE DB

Application

ODBC

DriverDriver

DriverDriver

DriverDriver

ProviderProvider

ProviderProvider

ProviderProvider

ProviderProvider

Relational Data

Non-Relational Data

OLE: Object Linking and EmbeddingOLE: Object Linking and Embedding

Page 10: Du@Chuong 7 - ADO

10

Quá trình phát triểnQuá trình phát triển

ADO.NETADO.NET

Page 11: Du@Chuong 7 - ADO

11

Nội DungNội Dung

ADO.NET Quá trình phát triển Đặc điểm ADO.NETĐặc điểm ADO.NET .NET Data Provider DataSet Data Source Configuration Wizard

Page 12: Du@Chuong 7 - ADO

Tổng quan ADO.NETTổng quan ADO.NET Tổng quan các lớp

Library System.Data.dll System.Data.OracleClient.dll

Namespace System.Data System.Data.SqlTypes

System.Data.Odbc System.Data.OleDb System.Data.SqlClient System.Data.OracleClient System.Data.SqlServerCe

System.Data.Common

12

Page 13: Du@Chuong 7 - ADO

Tổng quan ADO.NETTổng quan ADO.NET

Mô hình đối tượng ADO.NET Có 2 cách làm việc với ADO.NET

Tương tác trực tiếp với cơ sở dữ liệu: managed provider classes

Làm việc theo cách disconnected: data set classes

13

Page 14: Du@Chuong 7 - ADO

14

ADO.NETADO.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ệuthao tác dữ liệu trong

ngôn ngữ MS.NET ADO.NET là dạng “DisconnectedDisconnected”

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ý!

ADO luôn phải duy trì kết nối trong suốt quá trình làm việc.

Page 15: Du@Chuong 7 - ADO

15

Môi trường Môi trường ““connectedconnected””

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 Scalability

Page 16: Du@Chuong 7 - ADO

16

Môi trường Môi trường ““disconnecteddisconnected””

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

Page 17: Du@Chuong 7 - ADO

17

ADO.NETADO.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 phổ biến 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

Page 18: Du@Chuong 7 - ADO

18

ADO.NET vs. ADOADO.NET vs. ADO

Đặc ĐiểmĐặc Điểm ADOADO ADO.NETADO.NET

Data 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: Du@Chuong 7 - ADO

19

ADO.NETADO.NET

Kiến trúc của ADO.NET gồm 2 phần chính Phần kết nốiPhầ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 ConnectionConnection: quản lý việc đóng mở DB

???Connection: SqlConnection, OleDbConnection CommandCommand: lệnh truy vấn, tương tác dữ liệu khi đang

lập kết nối ???Command: SqlCommand, OleDbCommand

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

DataAdapterDataAdapter: cầu nối giữa DB và DataSet

Page 20: Du@Chuong 7 - ADO

20

ADO.NETADO.NET

Phần ngắt kết nốiPhần ngắt kết nối: là DataSetDataSet DataSet không quan tâm đến DB thuộc kiểu gì, và

lấy dữ liệu từ DataAdapter để xử lý DataSet xem như một DB 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

Page 21: Du@Chuong 7 - ADO

21

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

Page 22: Du@Chuong 7 - ADO

22

CCáác lớp thư viện ADO.NETc 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

Page 23: Du@Chuong 7 - ADO

23

Nội DungNội Dung

ADO.NET Quá trình phát triển Đặc điểm ADO.NET .NET Data ProviderNET Data Provider DataSet Data Source Configuration Wizard

Page 24: Du@Chuong 7 - ADO

24

NET Data ProviderNET Data Provider

Mô hình .NET Data Provider

Page 25: Du@Chuong 7 - ADO

.NET Data Provider.NET Data Provider

.NET Data Provider? Là một tập các lớp được thiết kế để làm việc

với một data store cụ thể

Mỗi .NET Data Provider cùng thực hiện một tập lớp cơ sở: Connection, Command, Parameter,

ParameterCollection, DataReader, DataAdapter, CommandBuilder và Transaction

Tên các class chỉ khác nhau phần prefix

25

Page 26: Du@Chuong 7 - ADO

.NET Data Provider.NET Data Provider

.NET DATA PROVIDERS

Establish connection with the database

Retrieve and manipulate data in the database

SQL Server .NET Framework Data ProviderOLE DB .NET Framework Data ProviderODBC .NET Framework Data ProviderOracle .NET Framework Data ProviderSQL Server CE .NET Framework Data Provider

26

Page 27: Du@Chuong 7 - ADO

.NET Data Provider.NET Data Provider

Lớp Connection SqlConnection, OleDbConnection, OdbcConnection,

OracleConnection

Lớp Command SqlCommand, OleDbCommand, OdbcCommand,

OracleCommand

Lớp Parameter SqlParameter, OleDbParameter, OdbcParameter,

OracleParameter

Lớp ParameterCollection SqlParameterCollection, OleDbParameterCollection,

OdbcParameterCollection, OracleParameterCollection

27

Page 28: Du@Chuong 7 - ADO

.NET Data Provider.NET Data Provider

Lớp DataReader SqlDataReader, OleDbDataReader, OdbcDataReader,

OracleDataReader

Lớp DataAdapter SqlDataAdapter, OleDbDataAdapter, OdbcDataAdapter,

OracleDataAdapter

Lớp CommandBuilder SqlCommandBuilder, OleDbCommandBuilder,

OdbcCommandBuilder, OracleCommandBuilder

Lớp Transaction SqlTransaction, OleDbTransaction, OdbcTransaction,

OracleTransaction

28

Page 29: Du@Chuong 7 - ADO

29

NET Data Provider - ConnectionNET Data Provider - Connection

Application Database

Connection

Thuộc tính & Phương thức• ConnectionString: chuỗi kết nối DataSource• Open(): thiết lập kết nối đến DS• Close(): đóng kết nối với DS

Page 30: Du@Chuong 7 - ADO

30

NET Data Provider - ConnectionNET Data Provider - Connection

Mô tả CSDL sử dụng minh họa

Đặc điểm Thông tinDBMS MS SQL Server Express 2005

DB 1 CSDL StudentDB

DB 2 CSDL Northwind

Page 31: Du@Chuong 7 - ADO

Đối tượng ConnectionĐối tượng Connection

Thành phần đầu tiên để truy cập dữ liệu trong ADO.NET

Phải chỉ ra một vài mảnh thông tin để kết nối Server Database Xác nhận / Ủy quyền

Application SqlConnection Database

31

Page 32: Du@Chuong 7 - ADO

Đối tượng ConnectionĐối tượng Connection

Server Dùng tham số “server” chỉ server của SQL Server

Truyền vào chuỗi kết nối Dùng “.” hay “localhost” để kết nối cơ sở dữ liệu

cục bộ

string connectString = "Server=localhost;...";Server

32

Page 33: Du@Chuong 7 - ADO

Đối tượng ConnectionĐối tượng Connection

Database Dùng tham số “database” chỉ database của SQL

Server Truyền vào chuỗi kết nối

string connectString = "Database=pubs;...";Database

33

Page 34: Du@Chuong 7 - ADO

Đối tượng ConnectionĐối tượng Connection

Xác nhận Có hai cách xác nhận kết nối client đến server

Windows authentication Integrated Security = SSPI trong chuỗi kết nối

SQL Server authentication User ID/uid và Password/pwd trong chuỗi kết nối

string connectString = "Integrated Security=SSPI;...";Thông tin Windows

string connectString = "User ID=Joe; Password=lobster;...";Thông tin SQL

34

Page 35: Du@Chuong 7 - ADO

Đối tượng ConnectionĐối tượng Connection

Kết nối Dùng SqlConnection để kết nối đến SQL Server

Tạo object Thiết lập chuỗi kết nối

Truyền vào constructor Thiết lập sau khi tạo đối tượng thông qua property

“ConnectionString” Gọi phương thức Open

Application SqlConnection Database

35

Page 36: Du@Chuong 7 - ADO

Đối tượng ConnectionĐối tượng Connection

Kết nối

string cs = "server=.;Integrated Security=SSPI;database=pubs";

SqlConnection connection = new SqlConnection(cs);

connection.Open();...

parameters

create

open

36

Page 37: Du@Chuong 7 - ADO

Đối tượng ConnectionĐối tượng Connection Ngắt kết nối

Đóng SqlConnection khi đã hoàn tất Gọi Close() hay Dispose() Đặt lời gọi trong khối finally hay câu lệnh using

static void Main(){ SqlConnection connection = null;

try { ... connection.Open(); ... } finally { connection.Dispose(); }}

Mở

Đóng

37

Page 38: Du@Chuong 7 - ADO

Đối tượng ConnectionĐối tượng Connection

Property Kiểu

ConnectionString string

ConnectionTimeout int

Database string

DataSource string

ServerVersion string

State ConnectionState

38

Page 39: Du@Chuong 7 - ADO

Đối tượng ConnectionĐối tượng Connection

Method Kiểu trả về

Open() void

Close() void

CreateCommand() SqlCommand

BeginTransaction() SqlTransaction

ChangeDatabase() void

39

Page 40: Du@Chuong 7 - ADO

40

NET Data Provider - ConnectionNET Data Provider - Connection

SqlConnection cnn = new SqlConnection();cnn.ConnectionString = “server= .\\SQLEXPRESS; database=Northwind; Trusted_Connection=true”;

cnn.Open();

//xử lý trong quá trình kết nối…cnn.Close();

SQL Connection

Thay bằng “localhost” trong SQL Server 2005

Page 41: Du@Chuong 7 - ADO

41

NET Data Provider - ConnectionNET Data Provider - Connection

ODBC/OLE DB Connection (*)Database

MS Access Driver = {Microsoft Access Driver (*.mdb)}; DBQ = <đường dẫn file access>

Provider=Microsoft.Jet.OLEDB.4.0; Data Source = <đường dẫn file access>

SQL Server Driver = {SQLServer}; Server = ServerName; Database= DatabaseName; Uid=Username; Pwd=Password;

Provider= SQLOLEDB; Data Source=ServerName; Initial Catalog=DatabaseName; UserId=Username; Password=Password

(*): Xem thêm chuỗi kết nối trong: http://www.connectionstrings.com/?carrier=sqlserver2005

Page 42: Du@Chuong 7 - ADO

42

NET Data Provider - ConnectionNET Data Provider - Connection

OleDbConnection cnn = new OleDbSqlConnection();cnn.ConnectionString = “Provider=Microsoft.Jet.OLEDB.4.0;

Data Source =Sinhvien.mdb”;

cnn.Open();

//xử lý trong quá trình kết nối…cnn.Close();

OLEDB Connection

Page 43: Du@Chuong 7 - ADO

43

NET Data Provider - CommandNET Data Provider - Command

Application Database

Connection

Command

Thuộc tính & Phương thức• Connection: kết nối để thực hiện lệnh• CommandText: câu lệnh cần thực hiện• CommandType: loại câu lệnh (Text,TableDirect, StoredProc)• ExecuteScalar(): thực hiện câu lệnh và trả về giá trị đơn• ExecuteNonQuery(): gọi các lệnh SQL, store, trả về số row bị tác động (Insert, Update, Delete…)• ExecuteReader(): thực hiện lệnh và trả về DataReader

Page 44: Du@Chuong 7 - ADO

Đối tượng CommandĐối tượng Command

Dùng sau khi connection đã được thiết lập

Dùng SqlCommand để thực thi câu lệnh SQL Phải chỉ ra command text

Truyền cho construtor Dùng thuộc tính CommandText

Phải chỉ ra connection Truyền cho constructor Dùng thuộc tính Connection Dùng phương thức CreateCommand của connection

Application SqlConnection DatabaseSqlCommand

Page 45: Du@Chuong 7 - ADO

Đối tượng CommandĐối tượng Command

Dùng SqlCommand để thực thi câu lệnh SQL

SqlConnection connection = new SqlConnection(...);...string text = "select * from authors";

SqlCommand command = new SqlCommand(text, connection);...

Tạocommand

Page 46: Du@Chuong 7 - ADO

Đối tượng CommandĐối tượng Command

ExecuteReader Trả về tập dữ liệu lưu trong SqlDataReader Forward-only và Read-only Ném ngoại lệ Exception nếu command lỗi

SqlConnection DatabaseExecuteReader

ApplicationSqlDataReader

SqlCommand

string text = "select * from authors";SqlConnection connection = new SqlConnection(...);SqlCommand command = new SqlCommand(text, connection);...SqlDataReader reader = command.ExecuteReader();

Thực thi commandNhật kết quả dữ liệu trả về

Page 47: Du@Chuong 7 - ADO

47

NET Data Provider - CommandNET Data Provider - Command

SqlConnection cnn = new SqlConnection();cnn.ConnectionString = “server=.\\SQLEXPRESS; database=Northwind; Trusted_connection=true”;

SqlCommand cmd = new SqlCommand(“”,cnn);cmd.CommandText = “Select COUNT(*) From Customers”;

cnn.Open();

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

SQL Command

Page 48: Du@Chuong 7 - ADO

48

NET Data Provider - CommandNET Data Provider - Command

SqlConnection conn = new SqlConnection();conn.ConnectionString = "Data source=.\\SQLEXPRESS;"+ "Initial Catalog=StudentDBStudentDB; Integrated security=yes;";

SqlCommand cmd = new SqlCommand();cmd.CommandText =

"Insert into Sinhvien values(007,'Le Nam','1/1/1980',1,null,null)";cmd.Connection = conn;

conn.Open();

cmd.ExecuteNonQuery();

conn.Close();

SQL Command

Page 49: Du@Chuong 7 - ADO

49

NET Data Provider - CommandNET Data Provider - Command

Tham số hóa câu lệnh Một câu lệnh được sử dụng nhiều lần!

…cmd.CommandText = "Insert into Sinhvien Insert into Sinhvien

values(@MS,@HT,@NS,@GT,@DC,@DT)values(@MS,@HT,@NS,@GT,@DC,@DT)";

cmd.Parameters.Add("@MS@MS", SqlDbType.Int);cmd.Parameters.Add("@HT@HT", SqlDbType.NVarChar);cmd.Parameters.Add("@NS@NS",SqlDbType.DateTime);cmd.Parameters.Add("@GT@GT",SqlDbType.Bit);cmd.Parameters.Add("@DC@DC",SqlDbType.NVarChar);cmd.Parameters.Add("@DT@DT",SqlDbType.Int);

SQL Command - Param

Khai báo tham sốKhai báo tham số

Câu lệnh được tham

số hóa

Câu lệnh được tham

số hóa

Kiểu dữ liệuKiểu dữ liệuTên field Tên field

Page 50: Du@Chuong 7 - ADO

50

NET Data Provider - CommandNET Data Provider - Command

…cmd.Parameters["@MS@MS"].Value = 999;cmd.Parameters["@HT@HT"].Value = "Nguyen Ha Giang";cmd.Parameters["@NS@NS"].Value = new DateTime(1978,12,4);cmd.Parameters["@GT@GT"].Value = 1;cmd.Parameters["@DC@DC"].Value = “Tan Binh";cmd.Parameters["@DT@DT"].Value = 5120791;

conn.Open();int count = (int) cmd.ExecuteNonQuery();

conn.Close();

SQL Command - Param

Truyền giá trị cho các

tham số tương ứng

Truyền giá trị cho các

tham số tương ứng

Page 51: Du@Chuong 7 - ADO

51

NET Data Provider - DataReaderNET Data Provider - DataReader

Application Database

Connection

CommandDataReader

Thuộc tính & Phương thức• HasRow: cho biết câu truy vấn có trả về dữ liệu• Read(): đọc một mẫu tin•[i]: truy xuất đến cột i của mẫu tin được đọc•Close(): đóng

Truy xuất tuần tự

Chỉ đọc dữ liệu

Cơ chế kết nối

Page 52: Du@Chuong 7 - ADO

DataReaderDataReader

Thuộc tính HasRows kiểm tra dữ liệu có không

Hai cách truy cập các dòng của tập kết quả Dùng foreach duyệt qua các dòng của đối tượng

IDataRecord Dùng while với Read()

Page 53: Du@Chuong 7 - ADO

DataReaderDataReader

Ba cách truy cập các cột Truy cập thông qua tên Truy cập thông qua chỉ mục getXXX() Dùng for với FieldCount

static void Display(SqlDataReader reader){ while (reader.Read()) { string last = (string)reader["au_lname"]; string first = (string)reader[2];

string zip = reader.GetString(7); ... }}

loop

Truy cập data trong dòngdùng indexTruy cập data trong dòng dùng phương thức get

Page 54: Du@Chuong 7 - ADO

DataReaderDataReader

Gọi Close() khi sử dụng xong SqlDataReader Đóng connection. Không thể truy cập dữ liệu.

string text = "select * from authors";SqlConnection connection = new SqlConnection(...);SqlCommand command = new SqlCommand(text, connection);...SqlDataReader reader = command.ExecuteReader();...reader.Close();

đóng reader khi hoàn tất

Page 55: Du@Chuong 7 - ADO

55

NET Data Provider - DataReaderNET Data Provider - DataReader

…SqlCommand cmd = new SqlCommand("Select * Select * From SinhvienFrom Sinhvien", conn);

SqlDataReader readerreader;

conn.Open();readerreader = cmd.ExecuteReaderExecuteReader(); while (readerreader.Read()) listBox1.Items.Add(readerreader["Hoten"]);readerreader.Close();conn.Close();

DataReader

Thực thi lệnh truy vấnThực thi lệnh truy vấn

Đọc một dòng Đọc một dòng

Lấy cột Hoten của dòng vừa đọc

Lấy cột Hoten của dòng vừa đọc

Page 56: Du@Chuong 7 - ADO

Đối tượng CommandĐối tượng Command

ExecuteNonQuery Dùng ExecuteNonQuery khi không có dữ liệu trả về

Trả về 1 số int báo số dòng bị ảnh hưởng

string text = "insert into authors " + "(au_id, au_lname, au_fname, contract) values " + "('111-11-1111', 'Adams', 'Mark', 1)";

SqlCommand command = new SqlCommand(text, connection);

int rowsAffected = command.ExecuteNonQuery();...

Thực thicommand

SqlConnection DatabaseExecuteNonQuery

Applicationint

SqlCommand

Page 57: Du@Chuong 7 - ADO

Đối tượng CommandĐối tượng Command

ExecuteScalar Dùng ExecuteScalar để thực thi select trả về 1 giá

trị đơn (object)

SqlConnection DatabaseExecuteScalar

Applicationobject

SqlCommand

Page 58: Du@Chuong 7 - ADO

Đối tượng CommandĐối tượng Command

Insert dữ liệu Dùng ExecuteNonQuery

mySqlCommand.CommandText = "INSERT INTO Customers (CustomerID, CompanyName) VALUES ( 'J2COM', 'Jason Price Corporation‘)";

int numberOfRows = mySqlCommand.ExecuteNonQuery();

Page 59: Du@Chuong 7 - ADO

Đối tượng CommandĐối tượng Command

Update dữ liệu Dùng ExecuteNonQuery

mySqlCommand.CommandText = "UPDATE Customers " + "SET CompanyName = 'New Company' " + "WHERE CustomerID = 'J2COM'";

numberOfRows = mySqlCommand.ExecuteNonQuery();

Page 60: Du@Chuong 7 - ADO

Đối tượng CommandĐối tượng Command

Delete dữ liệu Dùng ExecuteNonQuery

mySqlCommand.CommandText = "DELETE FROM Customers " + "WHERE CustomerID = 'J2COM'";

numberOfRows = mySqlCommand.ExecuteNonQuery();

Page 61: Du@Chuong 7 - ADO

Đối tượng CommandĐối tượng Command

Câu lệnh DDL: Create table, Alter table, Drop table, … Dùng ExecuteNonQuery

mySqlCommand.CommandText = "ALTER TABLE MyPersons " + "ADD EmployerID nchar(5) CONSTRAINT FK_Persons_Customers " + "REFERENCES Customers(CustomerID)";

result = mySqlCommand.ExecuteNonQuery();

Page 62: Du@Chuong 7 - ADO

Đối tượng CommandĐối tượng Command

Câu lệnh DDL: Create table, Alter table, Drop table, … Dùng ExecuteNonQuery

mySqlCommand.CommandText = "DROP TABLE MyPersons";

result = mySqlCommand.ExecuteNonQuery();

Page 63: Du@Chuong 7 - ADO

Đối tượng CommandĐối tượng Command

Property Kiểu

Connection string

CommandText string

CommandType CommandType

CommandTimeout String

Parameters SqlParameterCollection

Transaction SqlTransaction

Page 64: Du@Chuong 7 - ADO

Đối tượng CommandĐối tượng Command

Method Kiểu trả về

ExecuteReader() SqlDataReader

ExecuteNonQuery() int

ExecuteScalar() object

Page 65: Du@Chuong 7 - ADO

Đối tượng CommandĐối tượng Command

Stored procedure Dùng ExecuteReader

Thiết lập property CommandType =CommandType.StoredProcedure

Thiết lập property CommandText bằng tên procedure

Truyền tham số vào parameters Gọi ExecuteXXX()

Page 66: Du@Chuong 7 - ADO

Đối tượng CommandĐối tượng Command

Stored procedure

SqlCommand command = new SqlCommand("byroyalty", connection);

command.CommandType = CommandType.StoredProcedure;

command.Parameters.Add("@percentage", SqlDbType.Int);command.Parameters["@percentage" ].Value = 50;

reader = command.ExecuteReader();...

Tên procedure

parameters

execute

command type

Page 67: Du@Chuong 7 - ADO

67

Nội DungNội Dung

ADO.NET Quá trình phát triển Đặc điểm ADO.NET .NET Data Provider DataSetDataSet Data Source Configuration Wizard

Page 68: Du@Chuong 7 - ADO

DataSetDataSet

Client Server

Client requests data from Server

DataSet

Sends the d

ata to

Data

SetDataSet is passed to client

Client modifies the DataSet

Modified Data

Set is p

assed

to S

erver

Page 69: Du@Chuong 7 - ADO

69

DataSetDataSet

Là phần cơ sở dữ liệu được lưu trữ trong bộ nhớ (in-memory database)

Cơ chế không kết nối Nhờ đối tượng DataAdapter làm trung gian Hỗ trợ đầy đủ đặc tính XML Thao tác được với tất cả mô hình lưu trữ hiện

tại: Flat file database: plain text, mixed text, binary text Relational database. Hierarchical: data is organized into a tree-like structure

Page 70: Du@Chuong 7 - ADO

70

DataSet vs. DataReaderDataSet vs. DataReader

Supported by Visual Studio .NET tools

Slower access

Forward-only

Bind to one control only

Based on one SQL statement from one database

Read-only

Manually coded

Faster access

Forward and backward scanning of data

Bind to multiple controls

Includes multiple tables from different databases

Read/write access to data

DataReaderDataSet

Disconnected Connected

Page 71: Du@Chuong 7 - ADO

71

DataSetDataSet

Các thành phần Tables Relations

DataSetDataSetTablesTablesTablesTables

DataTable

RelationsRelations

DataRelation

DataRelation

DataRow(s)

DataColumn

Constraint(s)

DataTable

DataTable

Page 72: Du@Chuong 7 - ADO

72

DataSetDataSet

DataSetDataSet

.Tables[...].Tables[...]

.Relations[...].Relations[...]

......

DataSetDataSet

.Tables[...].Tables[...]

.Relations[...].Relations[...]

......

DataTable

.Columns[..]

.Rows[..]

DataTable

.Columns[..]

.Rows[..]

DataTableDataTable

.Columns[...].Columns[...]

.Rows[...].Rows[...]

.DefaultView.DefaultView

...

DataTableDataTable

.Columns[...].Columns[...]

.Rows[...].Rows[...]

.DefaultView.DefaultView

...

DataRowDataRow

DataRowDataRowdatadatadatadata

DataColumnDataColumn

schemaschemaschemaschema

DataColumnDataColumn

DataView

DataRelationDataRelationDataRelationDataRelation

Page 73: Du@Chuong 7 - ADO

DataSetDataSet

Lớp DataSet mô hình các dữ liệu phi kết nối DataSet có property dạng collection gồm tập các

đối tượng DataTable

public class DataSet ...{ public DataTableCollection Tables { get; } ... }

Bảng trong data set

Page 74: Du@Chuong 7 - ADO

74

DataSet - DataTableDataSet - DataTable

DataTable: thể hiện một bảng trong CSDL

Thuộc tính & Phương thức• TableName: tên của bảng dữ liệu• ColumnsColumns: danh sách các cột• RowsRows: danh sách các mẫu tin• PrimaryKey: danh sách các cột là khóa chính• NewRowNewRow(): tạo một mẫu tin mới

public class DataTable ...{ public DataRowCollection Rows { get; } public DataColumnCollection Columns { get; } ... }

rows và columnshiện tại trong bảng

Page 75: Du@Chuong 7 - ADO

75

DataSet - DataRowDataSet - DataRow

DataRow: đại diện cho mẫu tin trong DataTable RowState: trạng thái Added, Modified, Deleted,… [i]: truy xuất đến cột i Delete(): đánh dấu xóa mẫu tin

DataTableDataTable

Column1 Column2 … Column n

abc xyz omt

… … …

… … …

Row

public class DataRow ...{ public object this[string] { get; set; } public object this[int] { get; set; }

public object[] ItemArray { get; set; } ... }

Truy cập dữ liệu cột bằng tên hay số

Tất cả cột trong dòng

Page 76: Du@Chuong 7 - ADO

76

DataSet - DataColumn DataSet - DataColumn

DataColumn: đại diện cho một cột trong DataTable, được chỉ rõ tên cột và kiểu dữ liệu: ColumnName: tên cột DataType: kiểu dữ liệu

DataTableDataTable

Column1Column1 Column2Column2 … Column nColumn npublic class DataColumn ...{ public DataColumn(string name, Type type); ... }

Đối tượng Type cho kiểu của dữ liệu cột

Tên cột

Page 77: Du@Chuong 7 - ADO

Tạo DataSetTạo DataSet

Tạo DataSet: Có 2 cách tạo DataSet myDataSet = new DataSet(); DataSet myDataSet = new DataSet("myDataSet");

Page 78: Du@Chuong 7 - ADO

Tạo DataSetTạo DataSet

Điền dữ liệu vào DataSet: Có 2 cách Fill từ data source có trước Định nghĩa cấu trúc “bằng tay” sau đó fill dữ liệu

Page 79: Du@Chuong 7 - ADO

Tạo DataSetTạo DataSet

Fill từ source như Database Dùng DataAdapter và phương thức Fill

string text = "select * from authors";SqlConnection conn;...SqlDataAdapter adapter = new SqlDataAdapter(text, conn);

DataSet authors = new DataSet();

adapter.Fill(authors);

Tạo adapter

Dùng adapter đểFill vào DataSet

Page 80: Du@Chuong 7 - ADO

Truy cập dữ liệu trong DataSetTruy cập dữ liệu trong DataSet

DataSet có 3 cấp dữ liệu bên trong Tập các table Các dòng trong mỗi table Các giá trị cột trong mỗi dòng

foreach (DataTable table in myDataSet.Tables){ foreach (DataRow row in table.Rows) { foreach (object data in row.ItemArray) { // process column value } }}

Truy cập DataSet

Page 81: Du@Chuong 7 - ADO

Tự tạo DataTableTự tạo DataTable

Có thể tự tạo DataTable Định nghĩa cấu trúc bảng Tạo các dòng, thêm các dòng vào bảng, fill dữ liệu

DataTable customers = new DataTable("Customers");

customers.Columns.Add("Name", typeof(string));customers.Columns.Add("Id", typeof(Int32));

DataRow row = customers.NewRow();row[0] = "Ann";row[1] = 0;customers.Rows.Add(row);...

Tạo table

Định nghĩa các cột

Tạo row

Fill dữ liệu Thêm dòng vào table

Page 82: Du@Chuong 7 - ADO

Tự tạo DataSetTự tạo DataSet

Có thể tự tạo DataSet Tạo đối tượng DataSet Tạo các table và thêm vào DataSet

DataTable customers = new DataTable("Customers");...

DataSet data = new DataSet();

data.Tables.Add(customers);...

Tạo table

Tạo DataSet

Thêm table vào DataSet

Page 83: Du@Chuong 7 - ADO

83

NET Data Provider - DataAdapterNET Data Provider - DataAdapter

Data SourceData SourceDataAdapterDataTable

DataTable

DataSetDataSet

DataAdapter

FillFill

UpdateUpdate

UpdateUpdate

FillFill

SelectCommandSelectCommand

UpdateCommandUpdateCommand

SelectCommandSelectCommand

UpdateCommandUpdateCommand

Page 84: Du@Chuong 7 - ADO

84

NET Data Provider - DataAdapterNET Data Provider - DataAdapter

Thuộc tính & Phương thức• FillFill(DataSet): sử dụng SelectCommand lấy dữ liệu từ Data Source đổ vào Data Set • UpdateUpdate(DataSet): InsertCommand, UpdateCommand, DeleteCommand cập nhật dữ liệu trong DataSet vào DataSource

DataBase DataSetDataAdapter

Fill Fill

Update Update

Page 85: Du@Chuong 7 - ADO

85

NET Data Provider - DataAdapterNET Data Provider - DataAdapter

string strConn="Server=.\\SQLEXPRESS; Database=StudentDB; Trusted_connection=true";

SqlDataAdapter adapter = new SqlDataAdapter("Select * From Sinhvien", strConn);

DataSet ds = new DataSet();

adapter.Fill(ds);// thao tác trên dataset…adapter.Update(ds);

DataAdapter

Page 86: Du@Chuong 7 - ADO

Cập nhật cơ sở dữ liệu thông qua Cập nhật cơ sở dữ liệu thông qua DataAdapterDataAdapter

Có thể cập nhật cơ sở dữ liệu sau khi thay đổi DataSet Dùng SqlCommandBuilder để tạo các câu SQL cần thiết Dùng phương thức Update của DataAdapter để gởi các thay

đổistring text = "select * from authors";

SqlDataAdapter adapter = new SqlDataAdapter(text, conn);

DataSet ds = new DataSet();

adapter.Fill(ds, "authors");

ds.Tables[0].Rows[4][2] = "Bob";

SqlCommandBuilder b = new SqlCommandBuilder(adapter);

adapter.Update(ds, "authors");Cập nhật database

Xây dựng SQL

Chỉ bảng nguồn khi fill

Chỉnh sữa DataSet

Page 87: Du@Chuong 7 - ADO

87

Ví dụVí dụ

string strConn = "data source=.\\SQLEXPRESS; Initial Catalog=StudentDB; integrated security=yes;";string strCmd = "Select * From Sinhvien";SqlDataAdapter da = new SqlDataAdapter(strCmd, strConn);

SqlCommandBuilder builder = new SqlCommandBuilder(da);DataSet ds = new DataSet();

da.Fill(ds);

foreach (DataRow dr in ds.Tables[0].Rows) dr["Ngaysinh"] = DateTime.Now; da.Update(ds);

DataSet – Update Row

VD: Cập nhật tất cả các cột với ngày giờ hiện hành

Page 88: Du@Chuong 7 - ADO

88

Ví dụVí dụ

…SqlDataAdapter da = new SqlDataAdapter(strCmd, strConn);SqlCommandBuilder builder = new SqlCommandBuilder(da);

DataSet ds = new DataSet();da.Fill(ds);

DataTable table = ds.Tables[0];

DataRow[] rows = table.Select("Ngaysinh<'1/1/1980'");

foreach (DataRow r in rows) r.Delete();da.Update(ds);

DataSet – Delete Row

Lấy các dòng có ngày sinh trước

1/1/1980

Lấy các dòng có ngày sinh trước

1/1/1980

Đánh dấu xóa các dòng này

Đánh dấu xóa các dòng này

Page 89: Du@Chuong 7 - ADO

89

Nội DungNội Dung

ADO.NET Quá trình phát triển Đặc điểm ADO.NET .NET Data Provider DataSet Data Source Configuration WizardData Source Configuration Wizard

Page 90: Du@Chuong 7 - ADO

90

Data Source Configuration WizardData Source Configuration Wizard

Trong VS.NET có chức năng Data Source Configuration Wizard Nhanh chóng thiết lập Data Source cho project Xây dựng form hiển thị và thao tác dữ liệu

Thông qua thao tác kéo thả từ Data Source

Page 91: Du@Chuong 7 - ADO

91

Data Source Configuration WizardData Source Configuration Wizard

Tạo một ứng dụng Windows Application Trong menu Data | Add New Data Source…

Page 92: Du@Chuong 7 - ADO

92

Data Source Configuration WizardData Source Configuration Wizard

Tạo New Connection

Page 93: Du@Chuong 7 - ADO

93

Data Source Configuration WizardData Source Configuration Wizard

Hoàn tất khai báo Data Source

Chuỗi kết nối

Page 94: Du@Chuong 7 - ADO

94

Data Source Configuration WizardData Source Configuration Wizard

Lưu chuỗi kết nối trong file cấu hình

Tên của chuỗi kết nối

Page 95: Du@Chuong 7 - ADO

95

Data Source Configuration WizardData Source Configuration Wizard

Chọn bảng dữ liệu

Bảng Sinhvien và các field

Tên của DataSet

Page 96: Du@Chuong 7 - ADO

96

Data Source Configuration WizardData Source Configuration Wizard

Wizard sẽ tạo ứng dụng với Data Source

Data Sources Windows

Form in Design View

Page 97: Du@Chuong 7 - ADO

97

Data Source Configuration WizardData Source Configuration Wizard

Kéo thả binding control vào Form Trong cửa sổ Data Source

Chọn bảng cần sử dụng Thiết lập view là DataGridView hay Details

Kích chọn vào dấu mũi tên xuống sau tên bảng

Page 98: Du@Chuong 7 - ADO

98

Data Source Configuration WizardData Source Configuration Wizard

Kéo Table thả vào Form Tự động tạo các binding control cho table

Detail

Page 99: Du@Chuong 7 - ADO

99

Data Source Configuration WizardData Source Configuration Wizard

Bổ sung DataGridView cho Form Thay đổi Table sang DataGrid Kéo Table trong Data Source thả vào Form

DataGridView

Page 100: Du@Chuong 7 - ADO

100

Data Source Configuration WizardData Source Configuration Wizard

Kết quả ứng dụng

Chưa viết code!

Page 101: Du@Chuong 7 - ADO

101