Lập trình Windows Chương 5.1. Lấy dữ liệu theo cách Connected
1
Nội dung
• Các bước lấy dữ liệu
• Lấy 1 giá trị đơn
• Lấy tập giá trị
• Truy vấn tập giá trị và lưu lại
2
Các bước lấy dữ liệu
• Bước 1: Chỉ rõ dữ liệu mà ứng dụng cần
• Viết yêu cầu bằng câu lệnh SQL
• Select
• DML, DDL, DCL
• Bước 2: Gởi yêu cầu đến CSDL
• SQL:
• Bước 3: Nhận kết quả
• Tạo đối tượng Command
3
Lấy 1 giá trị đơn
• Một số câu lệnh SQL trả về giá trị đơn
• Tạo đối tượng Command
• Cung cấp câu lệnh SQL cho Command
• Thực thi câu lệnh
4
Lấy 1 giá trị đơn Một số câu lệnh SQL trả về giá trị đơn
• Select min(…)
From …
• Select max(…)
From …
• Select avg(…)
From …
• Select count(…) From …
• Select sum(…)
From …
string strSQL =
"Select count(*) From TenBang";
5
Lấy 1 giá trị đơn Tạo đối tượng Command
Đối tượng Command gồm:
• Đối tượng Connection
• Câu lệnh SQL
• Loại câu lệnh: CommadType
• Lấy dữ liệu nguyên 1 Bảng: CommadType.TableDirect
• Câu lệnh SQL: CommadType.Text
• Stored Procedure: CommadType.StoredProcedure
6
Lấy 1 giá trị đơn Tạo đối tượng Command
• Cách 1:
SqlCommand cmd = new SqlCommand(); cmd.Connection = conn; cmd.CommandText = strSQL; cmd.CommandType = CommandType.Text;
§ Cách 2:
SqlCommand cmd = new SqlCommand(strSQL); cmd.Connection = conn; cmd.CommandType = CommandType.Text;
7
Lấy 1 giá trị đơn Tạo đối tượng Command
§ Cách 3:
SqlCommand cmd = new SqlCommand(strSQL, conn); cmd.CommandType = CommandType.Text;
§ Cách 4:
SqlCommand cmd = conn.CreateCommand(); cmd.CommandText = strSQL; cmd.CommandType = CommandType.Text;
8
Lấy 1 giá trị đơn Thực thi câu lệnh
• Phương thức ExecuteScalar()
• ExecuteScalar trả về 1 giá trị kiểu object
conn.Open(); kq = (Kieu)cmd.ExecuteScalar(); conn.Close();
• Dùng ép kiểu để chuyển sang kiểu dữ liệu tương ứng
9
Lấy tập giá trị
• Câu lệnh SQL trả về tập giá trị
• Thực thi câu lệnh
• Đối tượng IDataReader
• Thuộc tính và phương thức của IDataReader
10
Lấy tập giá trị Câu lệnh SQL trả về tập giá trị
• Tập giá trị: Gồm nhiều dòng hoặc nhiều cột
• Select cột1, cột2, …
From …
string strSQL =
"Select cot1, … From TenBang";
11
Lấy tập giá trị Thực thi câu lệnh
• Phương thức ExecuteReader() trả về 1 đối tượng IDataReader
(SqlDataReader hay OleDBDataReader)
• IDataReader cho phép duyệt các dòng trong tập dữ liệu
!!! Không được đóng kết nối khi còn đang sử dụng đối tượng IDataReader
conn.Open(); SqlDataReader reader=cmd.ExecuteReader(); … conn.Close();
12
Lấy tập giá trị Đối tượng IDataReader
• Đặc điểm của đối tượng IDataReader
• Chứa một luồng dữ liệu, tại mỗi thời điểm chỉ truy cập 1 dòng
• Read-only
• Forward-only
13
Lấy tập giá trị Thuộc tính và phương thức của IDataReader
• Get[DataType](int i): GetInt32(…), GetString(…), …
• DataType: phụ thuộc vào kiểu dữ liệu cần lấy
• i: là số thứ tự của cột (Ordinal) muốn lấy dữ liệu
• string GetName(int i)
• Lấy tên cột có số thứ tự i
• int GetOrdinal(string name)
• Lấy số thứ tự của cột có tên name
• bool IsDbNull(int i)
• Kiểm tra giá trị cột I có là null/nothing hay không
14
Lấy tập giá trị Thuộc tính và phương thức của IDataReader
• object GetValue(int i)
• Hai indexer có chức năng tương tự phương thức GetValue
• Lấy giá trị cột i mà không quan tâm kiểu dữ liệu
• object dataReader[int i]
!!! Nên dùng số thứ tự (i) thay vì tên cột (columnName)
• object dataReader[string columnName]
15
Lấy tập giá trị Thuộc tính và phương thức của IDataReader
• bool HasRow
• bool Read()
• true: cho biết IDataReader chứa 1 hay nhiều dòng dữ liệu
• Đọc dòng kế tiếp
• Trả về true nếu còn 1 hay nhiều dòng dữ liệu
16
Lấy tập giá trị Thuộc tính và phương thức của IDataReader
conn.Open(); SqlDataReader reader=cmd.ExecuteReader(); if (!reader.HasRows)
…
while (reader.Read()) {
value1 = reader.GetString(0); value2 = reader.GetInt32(1);
} conn.Close();
17
Truy vấn tập giá trị và lưu lại
• Điều kiện lưu dữ liệu vào bộ nhớ
• Data-binding
• Cần nhiều thời gian để xử lý dữ liệu
ầ ư ữ ệ ạ ể ử
C n l u d li u l
i đ x lý sau
• Trong một số trường hợp cần lưu dữ liệu
18
Truy vấn tập giá trị và lưu lại
Mỗi dòng là DbDataRecord
ArrayList arrList = new ArrayList();
conn.Open(); SqlDataReader reader=cmd.ExecuteReader(); foreach (DbDataRecord rec in reader) {
arrList.Add(rec);
} conn.Close();
//Sử dụng arrList …
19
Q&A
20 20