Giới thiệu công nghệ ADO.NET
Sơ lược lịch sử phát triển
Kiến trúc ADO.NET
Các thư viện truy xuất CSDL trong ADO.NET
38 trang |
Chia sẻ: phuongt97 | Lượt xem: 577 | Lượt tải: 0
Bạn đang xem trước 20 trang nội dung tài liệu Giới thiệu công nghệ ADO.NET, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Giới thiệu công nghệ ADO.NET
2
Sơ lược lịch sử phát triển
ODBC
Driver
Driver
Driver
Application
Application
Database
Database
DB API
DB API
DB API
ODBC API
DB API
DB API
DB API
Native API
Open DataBase Connectivity
3
ADO
OLE DB
Sơ lược lịch sử phát triển
Application
Non-Relational Data
Relational Data
OLEDB và ADO
ODBC
Driver
Driver
Driver
Provider
Provider
Provider
Provider
4
ADO.NET
ODBC
Kiến trúc ADO.NET
Application
Non-Relational Data
Relational Data OLE DB
Oracle
SQL Server
ODBC
OLE DB
.NET Data Provider ADO.NET
5
Kiến trúc ADO.NET
6
Cây phân cấp các đối tượng trong ADO.NET
Kiến trúc ADO.NET
7
Connected objects: là những đối tượng giao tiếp trực
tiếp với CSDL.
Disconnected objects: cho phép các user làm việc với
dữ liệu dạng offline (khi đã đóng kết nối cơ sở dữ liệu)
Kiến trúc ADO.NET
8
Các thư viện truy xuất CSDL trong ADO.NET
System.Data.OleDb: Access, SQL Server, Oracle
System.Data.SqlClient: SQL Server
System.Data.OracleClient: Oracle
Ghi chú:
Về mặt giao tiếp lập trình ứng dụng, cả 3 thư viện
trên không khác biệt nhau nhiều.
Dùng thư viện System.Data.SqlClient sẽ truy xuất
SQL Server nhanh hơn System.Data.OleDb
Dùng thư viện System.Data.OracleClient sẽ truy xuất
Oracle nhanh hơn System.Data.OleDb
9
.NET Data Provider
Ví dụ: OleDbConnection, SqlConnection, OracleConnection
XXXConnection
XXXDataAdapter
XXXCommand
XXXDataReader
.NET Data Provider
DataSet
XXXParameter
XXXTransaction
Data Source
(CSDL)
10
.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 Source Application
Connection
11
IDbConnection cnn = new
SqlConnection(“server=localhost; database=Northwind;
user id=sa; password=sa”);
cnn.Open();
// Does something here.
cnn.Close();
.NET Data Provider – Connection (tt)
12
.NET Data Provider - Command
Data Source Application
Connection 011010011 011010011
Command
13
.NET Data Provider – xxxCommand
Các thuộc tính, phương thức thông dụng:
Connection: kết nối dùng để thực hiện câu lệnh.
CommandText: câu lệnh 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.
14
IDbConnection cnn = new
SqlConnection(“server=localhost; database=Northwind;
user id=sa; password=sa”);
IDbCommand cmd = new SqlCommand();
cmd.Connection = cnn;
cmd.CommandText = “SELECT COUNT(*) FROM Orders”;
cmd.CommandType = CommandType.Text;
cnn.Open();
int count = (int)cmd.executeScalar();
cnn.Close();
.NET Data Provider – xxxCommand (tt)
15
IDbConnection cnn = new
SqlConnection(“server=localhost; database=QLHS; user
id=sa; password=sa”);
IDbCommand cmd = new SqlCommand();
cmd.Connection = cnn;
cmd.CommandText =
“INSERT INTO HocSinh(id_hocsinh, tenhocsinh, dtb)
VALUES(5, „Nguyễn Văn A‟, 8.5)”;
cmd.CommandType = CommandType.Text;
cnn.Open();
cmd.executeNonQuery();
cnn.Close();
.NET Data Provider – xxxCommand (tt)
16
.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.
17
.NET Data Provider – Parameter(tt)
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(?, ?, ?)”;
18
Tạo các parameter
cmd.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 parameter
foreach (Student s in studentList)
{
cmd.Parameters[“@id”] = i;
cmd.Parameters[“@ten”] = s.studentName;
cmd.Parameters[“@dtb”] = s.studentMarks;
cmd.ExecuteNonQuery();
}
.NET Data Provider – Parameter(tt)
19
.NET Data Provider – DataReader
Data Source Application
Connection
Command
BookID BookName Author
i Book i Author i
DataReader
ExecuteReader() Read()
011010011 011010011
20
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.
.NET Data Provider – DataReader
21
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();
IDataReader dr = cmd.executeReader();
while (dr.Read())
MessageBox.Show(dr[“CustomerID”].ToString());
dr.Close();
cnn.Close();
.NET Data Provider – DataReader
22
.NET Data Provider - DataAdapter
SelectCommand
UpdateCommand
InsertCommand
DeleteCommand
DataAdapter
Data Source
DataSet
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.
23
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);
.NET Data Provider - DataAdapter
24
DataSet
Có thể nói 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
Data Source
DataSet
DataSet là gì?
25
DataSet
DataSet
DataTable
Columns
Rows
DataColumn
DataRow
Tables
Relations DataRelation
26
DataSet - DataTable
DataTable thể hiện một bảng trong cơ sở dữ liệu.
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.
27
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.
28
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.
29
Các bước thao tác CSDL
Bước 1: Tạo chuỗi kết nối cnStr
Bước 2: Kết nối CSDL với đối tượng XXXConnection
Bước 3: Tạo chuỗi strSQL thao tác CSDL
Bước 4: Thực thi chuỗi strSQL với đối tượng
XXXCommand hoặc XXXDataAdapter
Bước 5: Đóng kết nối
30
Các phương thức thông dụng
1. LayDanhSach (kết quả trả về là một ArrayList)
2. LayBang (kết quả trả về là DataTable)
3. CapNhatBang
4. TimKiem (đối tượng theo mã)
5. Them (1 đối tượng)
6. Xoa (đối tượng theo mã)
7. Sua (1 đối tượng)
8.
31
Bước 1: Tạo chuỗi kết nối
CSharp:
Kết nối với CSDL Access:
String cnStr = "Provider = Microsoft.Jet.OLEDB.4.0;
Data Source = DeAnCongTy.mdb";
Kết nối với CSDL SQL Server:
String cnStr = "Provider = Server=localhost;
database=Northwind; user id=sa; password=sa";
32
Lưu ý: khi kết nối với CSDL Access, nếu không chỉ ra
đường dẫn tuyệt đối đến tập tin CSDL thì tập tin CSDL
phải nằm cùng với thư mục chứa tập tin thực thi (.exe)
Còn nhiều dạng câu kết nối, như với Oracle, kết nối qua
đường mạng, kết nối có bảo mật, . SV có thể tìm kiếm
thêm trên Google qua các tổ hợp từ khóa: connection,
string, CSharp, VB, NET, 2005,
Bước 1: Tạo chuỗi kết nối
33
Bước 2: Mở kết nối với XXXConnection
CSharp:
OleDbConnection cn = new OleDbConnection(cnStr);
cn.Open();
34
Bước 3: Tạo chuỗi strSQL thao tác CSDL
CSharp:
String strSQL = "Select * From NhanVien";
Ghi chú:
Trong những câu SQL phức tạp có thể sẽ phải cộng
thêm chuỗi hoặc thêm parameter
35
Bước 4: Thực thi chuỗi strSQL với XXXDataAdapter
CSharp:
DataTable dt = new DataTable();
SqlDataAdapter da = new SqlDataAdapter(strSQL, cn);
da.Fill(dt);
36
Bước 4: Thực thi chuỗi strSQL với XXXCommand
CSharp:
SqlCommand cmd = new SqlCommand(strSQL, cn);
SqlDataReader dr = cmd.ExecuteReader();
Ghi chú:
Với những câu SQL phức tạp có thể phải khởi tạo
các giá trị của các parameter trước khi thực thi chuỗi
strSQL
37
Bước 5: Đóng kết nối
CSharp:
cn.Close();
Thảo luận:
Có cần thiết phải mở/đóng kết nối với mỗi lần thao
tác với CSDL? Chỉ mở/đóng 1 lần vào đầu/cuối
chương trình?
SV tự tìm hiểu Connection Pool
38
Các file đính kèm theo tài liệu này:
- gioi_thieu_cong_nghe_ado_net.pdf