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