Tải bản đầy đủ (.ppt) (44 trang)

chương 2 lấy dữ liệu theo cách connected

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (301.77 KB, 44 trang )

LẤY DỮ LIỆU
THEO CÁCH CONNECTED
Chương 2
2
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

Truy vấn có tham số

Gọi Store Procedure
3
4
5
6
Các bước lấy dữ liệu

3 bước cơ bản

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

SQL:


Select

DML, DDL, DCL

Bước 2: Gởi yêu cầu đến CSDL

Tạo đối tượng Command

Bước 3: Nhận kết quả
7
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 văn bản câu lệnh SQL cho Command

Thực thi câu lệnh
8
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";
9
Lấy 1 giá trị đơn
Tạo đối tượng Command

Một đối tượng Command cần 3 thông tin

Đối tượng Connection

Văn bản 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
10
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;
11
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;
12
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

Dùng ép kiểu để chuyển sang kiểu dữ liệu
tương ứng

Chú ý: Phải mở kết nối trước khi gọi lệnh

ExecuteScalar
conn.Open();
kq = (Kieu)cmd.ExecuteScalar();
conn.Close();
13
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
14
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";
15
Lấy tập giá trị
Thực thi câu lệnh

Phương thức ExecuteReader()


ExecuteScalar trả về 1 đối tượng IDataReader
(SqlDataReader hay OleDBDataReader)

IDataReader cho phép chúng ta duyệt qua các
dòng trong tập dữ liệu

Chú ý:

Phải mở kết nối trước khi gọi lệnh ExecuteReader

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();
16
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
17
Lấy tập giá trị
Thuộc tính và phương thức của IDataReader


Get[DataType](int i): GetInt32(…), GetString(…), …

Tên đầy đủ: phụ thuộc vào kiểu dữ liệu cần lấy

Tham số của hàm: 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
18
Lấy tập giá trị
Thuộc tính và phương thức của IDataReader

object GetValue(int i)

Lấy giá trị cột I mà không quan tâm kiểu dữ liệu

Hai indexer có chức năng tương tự phương
thức GetValue

object dataReader[int i]


object dataReader[string name]

Chú ý: Nên dùng số thứ tự thay vì tên cột
19
Lấy tập giá trị
Thuộc tính và phương thức của IDataReader

bool HasRow

true: cho biết IDataReader chứa 1 hay nhiều
dòng dữ liệu

bool Read()

Đọc dòng kế tiếp

Trả về true nếu còn 1 hay nhiều dòng dữ liệu
20
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();
21
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ớ

Trong một số trường hợp cần lưu dữ liệu

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
22
Truy vấn tập giá trị và lưu lại

Dùng vòng lặp foreach

Để lặp qua các dòng dữ liệu

Mỗi dòng dữ liệu được gọi là DbDataRecord
List<NhanVien> nhanVienList = new List<NhanVien>();
conn.Open();
SqlDataReader reader=cmd.ExecuteReader();
foreach (DbDataRecord rec in reader)
{
nhanVienList.Add(new NhanVien(rec));
}
conn.Close();
//Sử dụng nhanVienList


23
TRUY VẤN CÓ THAM SỐ
24
Nhu cầu cần có truy vấn có tham số

Chúng ta thường viết các câu lệnh SQL đề tìm
kiếm các dòng dữ liệu trong CSDL theo một điều
kiện nào đó. Những giá trị trong điều kiện do
người dùng nhập vào

Ví dụ: Tìm kiếm nhân viên có trong CSDL không
để cho phép đăng nhập vào chương trình
string strUser, strPass;
strUser = txtUser.Text;
strPass = txtPass.Text;
string strSQL;
strSQL = "select * from NhanVien where " +
"username='" + strUser + "' and " +
"password='" + strPass + "'";
25
Nhu cầu cần có truy vấn có tham số

Nhận xét

Bất kỳ những gì nhập vào txtPass, txtUser đều
được đặt vào trong câu SQL

Hãy nhập vào username: ' or ('1'='1') or '1'='1 hay

Hãy nhập vào password: ' or '1'='1

×