Dich vu ong gia noel giao qua Giang sinh du lich Chuong Vang
Du@Chuong 7 - ADO
-
Upload
khanh-trung -
Category
Documents
-
view
30 -
download
0
Transcript of Du@Chuong 7 - ADO
1
ADO.NETADO.NET
ThS. Nguyễn Thị Thu Dự
Tổng quan ADO.NETTổng quan ADO.NET
Storedinto
Database (Oracle, SQL Server)
Client
ADO.NETData access technology
2
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
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
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 ... ...
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
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
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
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
10
Quá trình phát triểnQuá trình phát triển
ADO.NETADO.NET
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
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
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
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.
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
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
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
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.
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
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
21
Mô hMô hìình đối tượng ADO.NETnh đối tượng ADO.NET
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
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
24
NET Data ProviderNET Data Provider
Mô hình .NET Data Provider
.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
.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
.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
.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
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
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
Đố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
Đố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
Đố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
Đố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
Đố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
Đố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
Đố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
Đối tượng ConnectionĐối tượng Connection
Property Kiểu
ConnectionString string
ConnectionTimeout int
Database string
DataSource string
ServerVersion string
State ConnectionState
38
Đối tượng ConnectionĐối tượng Connection
Method Kiểu trả về
Open() void
Close() void
CreateCommand() SqlCommand
BeginTransaction() SqlTransaction
ChangeDatabase() void
39
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
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
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
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
Đố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
Đố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
Đố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ề
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
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
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
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
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
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()
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
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
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
Đố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
Đố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
Đố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();
Đố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();
Đố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();
Đố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();
Đố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();
Đối tượng CommandĐối tượng Command
Property Kiểu
Connection string
CommandText string
CommandType CommandType
CommandTimeout String
Parameters SqlParameterCollection
Transaction SqlTransaction
Đối tượng CommandĐối tượng Command
Method Kiểu trả về
ExecuteReader() SqlDataReader
ExecuteNonQuery() int
ExecuteScalar() object
Đố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()
Đố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
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
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
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
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
71
DataSetDataSet
Các thành phần Tables Relations
DataSetDataSetTablesTablesTablesTables
DataTable
RelationsRelations
DataRelation
DataRelation
DataRow(s)
DataColumn
Constraint(s)
DataTable
DataTable
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
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
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
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
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
Tạo DataSetTạo DataSet
Tạo DataSet: Có 2 cách tạo DataSet myDataSet = new DataSet(); DataSet myDataSet = new DataSet("myDataSet");
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
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
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
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
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
83
NET Data Provider - DataAdapterNET Data Provider - DataAdapter
Data SourceData SourceDataAdapterDataTable
DataTable
DataSetDataSet
DataAdapter
FillFill
UpdateUpdate
UpdateUpdate
FillFill
SelectCommandSelectCommand
UpdateCommandUpdateCommand
SelectCommandSelectCommand
UpdateCommandUpdateCommand
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
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
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
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
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
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
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
91
Data Source Configuration WizardData Source Configuration Wizard
Tạo một ứng dụng Windows Application Trong menu Data | Add New Data Source…
92
Data Source Configuration WizardData Source Configuration Wizard
Tạo New Connection
93
Data Source Configuration WizardData Source Configuration Wizard
Hoàn tất khai báo Data Source
Chuỗi kết nối
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
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
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
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
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
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
100
Data Source Configuration WizardData Source Configuration Wizard
Kết quả ứng dụng
Chưa viết code!
101