- 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 Comman
Trang 1TRƯỜNG ĐẠI HỌC NHA TRANG
CHỦ ĐỀ 4
LƯU TRỮ, XỬ LÝ VÀ TRÌNH BÀY DỮ LIỆU
LẬP TRÌNH CƠ SỞ DỮ LIỆU VỚI C#
Trang 4Các hệ quản trị cơ sở dữ liệu phổ biến:
Trang 7- 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
Command: lệnh truy vấn, tương tác dữ liệu khi đang lập kết nối
DataReader: đọc dữ liệu, chỉ xử lý 1 dòng dữ liệu tại một thời điểm
DataAdapter: cầu nối giữa DB và DataSet
Trang 9Mô hình đối tượng ADO.NET:
Trang 10- Là mô hình cho phép thao tác với nhiều loại CSDL
- Ứng với mỗi loại CSDL sẽ là một NET Framework Data Provider thích hợp
10
Trang 11Mô hình NET Provider:
Trang 12Các đối tượng của ADO.NET:
12
Trang 13Đối tượng Connection:
- Thuộc tính:
- Phương thức:
Open(): thiết lập kết nối đến DS
Close(): đóng kết nối với DS
Trang 14Đối tượng Connection:
14
- Cách 1:
SqlConnection DbCon = new SqlConnection();
DbCon.ConnectionString = @“ server= \SQLEXPRESS;
database=QLBH; Trusted_Connection=true ”;
DbCon.Open();//mở kết nối
//xử lý trong quá trình kết nối
… DbCon.Close(); //đóng kết nối
Trang 15Đối tượng Connection
Đặt chuỗi kết nối dung chung:
1 R_Click vào Project->properties->Settings
Name: đặt tên chuỗi kết nối
Type: Connection String
Trang 16Đối tượng Command:
16
- Thuộc tính:
Connection: kết nối để thực hiện lệnh
CommandText: câu lệnh cần thực hiện (tên bảng, câu lệnh SQL, tên StoredProcedure)
Trang 17Đối tượng Command:
- Phương thức:
ExecuteScalar(): thực hiện câu lệnh và trả về giá trị đơn
ExecuteNonQuery(): gọi các lệnh SQL, StoredProc, trả về số row bị tác động (Insert, Update, Delete)
Trang 18Đối tượng Command:
- Đếm số sản phẩm trong bảng SanPham:
18
public int CountSP() {
SqlConnection con = new
SqlConnection ( Program BHConString);
Trang 19Đối tượng Command:
- Thuộc tính Parameters
- Ví dụ: Tìm mã sản phẩm trong bảng SanPham
public string SelectSP( string ma) { string id;
SqlConnection con = new
SqlConnection ( Program BHConString);
con.Open();
SqlCommand cmd = new SqlCommand ( "sanpham_Select" );
cmd.CommandType = CommandType StoredProcedure;
Trang 20Đối tượng Command:
SELECT * from SANPHAM where masp = @masp
END
Trang 21Đối tượng Command:
Trang 22Đối tượng Command:
- Thêm sản phẩm mới dùng StoredProc có tham số
cmd.Parameters.Add( "@Masp" , sp.masp);
cmd.Parameters.Add( "@Tensp" , sp.tensp );
Trang 23Đối tượng Command:
- StroredProcedure:
CREATE PROCEDURE SanPham_Insert @MaSP nvarchar(5),
@TenSP nvarchar(50), @Donvitinh nvarchar(20), @Dongia decimal(18,0), @HinhAnh varbinary(max) AS
BEGIN
insert into SANPHAM(MaSP,TenSP,Donvitinh,DongiaN, HinhAnh)
values(@MaSP,@TenSP,@Donvitinh,@Dongia, @HinhAnh) END
Trang 24Đối tượng DataReader:
- Truy xuất tuần tự, chỉ đọc dữ liệu
- 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
24
Connection Command DataReader
Trang 25Đối tượng DataReader:
public List < Sanpham > SelectAll() { List < Sanpham > lsSanpham = new List < Sanpham >();
Mở 3 kế6 t nố6 i CSDL SqlCommand cmd = new SqlCommand ( “Sanpham_SelectAll" );
cmd.CommandType = CommandType StoredProcedure;
cmd.Connection = con;
SqlDataReader dr =
cmd.ExecuteReader(CommandBehavior.CloseConnection);
while (dr.Read()) { Sanpham sp = new Sanpham ();
sp.masp = ( string )dr["masp"];
lsSanpham.Add(sp);
} dr.Close(); return lsSanpham;
}
Trang 26Đối tượng DataApdapter:
- Là cầu nối giữa giữa Database và DataSet
- Cung cấp 4 đối tượng Command: Select, Insert, Update, Delete
26
Data Source DataAdapter
DataTable DataSet
Fill
Update SelectCommand
UpdateCommand
Trang 27Đối tượng DataApdater:
- Thuộc tính, phương thức:
• Fill(DataSet): sử dụng SelectCommand lấy dữ liệu từ Data Source đổ
vào Data Set
• Update(DataSet): InsertCommand, UpdateCommand, DeleteCommand cập nhật dữ liệu trong DataSet vào DataSource
Trang 28Đối tượng DataApdater:
28
- Lấy dữ liệu trong bảng Sanpham đưa vào DataSet
public DataSet SelectAll1() {
SqlDataAdapter adapter = new SqlDataAdapter("Select * From Sanpham",Program.BHConString );
DataSet ds = new DataSet ();
adapter.Fill(ds,"SP");
return ds;
}
Trang 31DataRow(s) DataColumn Constraint(s)
DataTable DataTable
Trang 3232
Trang 33DataSet 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
DataReader DataSet
Trang 34- Thể hiện 1 bảng trong CSDL
- Thuộc tính, phương thức:
TableName: tên của bảng dữ liệu
Columns: danh sách các cột (lớp DataColumn)
Rows: danh sách các mẫu tin (lớp DataRow)
PrimaryKey: danh sách các cột là khóa chính
NewRow(): tạo một mẫu tin mới
Clear(): xóa toàn bộ dữ liệu trong bảng
Copy(): tạo 1 DataTable mới cùng cấu trúc và dữ liệu
34
Trang 35DataColumn, DataRow:
- DataColumn: đại diện cho một cột trong bảng
ColumnName: tên cột
DataType: kiểu dữ liệu
- DataRow: đại diện cho mẫu tin trong bảng
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
Trang 36Ví dụ:
- Thêm sản phẩm mới dùng DataAdapter, DataSet, DataTable, DataRow
36
public void InsertAdapter( Sanpham sp)
{ SqlDataAdapter da = new SqlDataAdapter ( "Select * From
Sanpham" , Program BHConString);
SqlCommandBuilder builder = new SqlCommandBuilder (da);
DataSet ds = new DataSet (); da.Fill(ds, "SP" );
DataRow dr = ds.Tables[ "SP" ].NewRow();
dr[ "masp" ] = sp.masp; dr[ "tensp" ] = sp.tensp;
dr[ "donvitinh" ] = sp.dvt; dr[ "dongiaN" ] = sp.gianhap;
dr[ "hinhanh" ] = sp.hinhanh;
ds.Tables[ "SP" ].Rows.Add(dr);
da.Update(ds, "SP" );
}
Trang 37SqlCommandBuilder builder = new SqlCommandBuilder (da);
DataTable dtbl = new DataTable ();
Trang 39- Là cầu nối giữa CSDL với các điều khiển trên Form
- Chứa nguồn dữ liệu liên kết với điều khiển
- Cung cấp nhiều phương thức để điều hướng và lọc dữ liệu dễ dàng
- Thuộc tính:
Position: vị trí dòng hiện tại của nguồn dữ liệu
Count: số dòng trong nguồn dữ liệu
Filter:
Trang 40- Phương thức:
EndEdit(): lưu thay đổi dòng hiện tại
CancelEdit(): bỏ qua thay đổi dòng hiện tại
40
Trang 41- Lấy dữ liệu từ bảng SANPHAM hiển thị lên DataGridView
private void Form2_Load( object sender, EventArgs e)
{
SqlDataAdapter da = new SqlDataAdapter ( "Select * From
Sanpham" , Program BHConString);
DataSet ds = new DataSet ();
Trang 4242
- Lấy dữ liệu từ bảng SANPHAM hiển thị lên DataGridView
Trang 43private void btnVecuoi_Click( object sender,
EventArgs e) { bs.MoveLast();
}
Trang 4444
private void cmbMasp_SelectedIndexChanged( object sender,
EventArgs e) { string ma = cmbMasp.Text ;
if (ma != "" ) { bs.Filter = "MaSP=" + "'" + ma + "'" ; } dgSanpham.DataSource = bs;
}
Trang 45 Row(i)(j): ô tại vị trí (i,j)
Row(i)(j).Value: giá trị ô ở vị trí (i, j)
Trang 47- Chọn dòng trong DatagridView hiển thị lên các control tương ứng ở phía trên:
Trang 50Binding Navigator:
50