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: Co
Trang 1LẤY DỮ LIỆU THEO CÁCH CONNECTED
Chương 2
Trang 2Nội dung
Các bước lấy dữ liệu
Lấy 1 giá trị đơn
Trang 33
Trang 6Các bước lấy dữ liệu
• 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ả
Trang 7Lấ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
Trang 8Lấ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";
Trang 9Lấ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
Trang 10Lấy 1 giá trị đơn
Tạo đối tượng Command
Trang 11Lấy 1 giá trị đơn
Tạo đối tượng Command
Trang 12Lấ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
Trang 13Lấ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
Trang 15Lấ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();
Trang 16Lấ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
Trang 17Lấ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
Trang 18Lấ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]
Trang 20value1 = reader.GetString(0);
value2 = reader.GetInt32(1);
} conn.Close();
Trang 21Truy 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
Trang 22Truy 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> ();
Trang 2323TRUY VẤN CÓ THAM SỐ
Trang 24Nhu 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;
Trang 25Nhu 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
Trang 26Nhu cầu cần có truy vấn có tham số
Truy vấn có tham số
• Những nơi trong câu SQL cần dữ liệu người
dùng, chúng ta sẽ tạo những tham số tại những nơi đó (gọi là parameter placeholders)
• Bất kỳ dữ liệu gì được truyền vào tham số sẽ
được đối xử như là dữ liệu thuần túy (không phải là 1 câu lệnh SQL)
Trang 27Các bước tạo truy vấn có tham số
3 bước tạo truy vấn có tham số
• Bước 1: Xây dựng văn bản câu SQL có tham số
• Bước 2: Khai báo đối tượng SqlParameter, gán
giá trị tương ứng
• Bước 3: Gán đối tượng SqlParameter cho thuộc
tính Parameters của đối tượng SqlCommand
Trang 28Các bước tạo truy vấn có tham số
Bước 1:Xây dựng văn bản câu SQL có tham số
• Những nơi cần dữ liệu người dùng chúng ta tạo
một parameter placeholder
• Tên parameter placeholder: @ten
strSQL = "select … where cot1 = @ten1 …"
Ví dụ:
Cú pháp:
Parameter placeholder
Trang 29Các bước tạo truy vấn có tham số
Bước 2: Khai báo đối tượng SqlParameter,
gán giá trị tương ứng
• Mỗi parameter placeholder tương ứng với một
đối tượng SqlParameter
SqlParameter param;
param = new SqlParameter();
param = new SqlParameter( string paramName, object value);
param = new SqlParameter( string paramName, SqlDbType dbType);
param = new SqlParameter( string paramName, SqlDbType dbType, int size);
Cú pháp:
Trang 30Các bước tạo truy vấn có tham số
Một số loại kiểu dữ liệu của tham số: SqlDbType
• Số
– TinyInt = Byte – SmallInt = Int16 – Int = Int32
– BigInt = Int64 – Real = Single – Float = Double – Decimal = Decimal – Money = Decimal
• Chuỗi
– Char = String – NChar = String – Text = String – NText = String – NVarChar = String
• Kiểu khác
Trang 31Các bước tạo truy vấn có tham số
Một số property của SqlParameter
• string param.ParameterName
• SqlDbType param.SqlDbType
• object param.Value
• int param.Size
Trang 32Các bước tạo truy vấn có tham số
Ví dụ
SqlParameter paramMaNV, paramMatKhau;
paramMaNV = new SqlParameter ();
paramMaNV.SqlDbType = SqlDbType VarChar;
paramMaNV.ParameterName = "@user";
paramMaNV.Value = strMaNV;
paramMatKhau = new SqlParameter ();
paramMatKhau.SqlDbType = SqlDbType VarChar;
paramMatKhau.ParameterName = "@pass";
paramMatKhau.Value = strMatKhau;
Trang 33Các bước tạo truy vấn có tham số
Bước 3: Gán đối tượng SqlParameter cho
thuộc tính Parameters của đối tượng
cmd.Parameters.Add( string paramName, SqlDbType dbType);
cmd.Parameters.Add( string paramName, SqlDbType dbType, int size);
Trang 34GỌI STORED PROCEDURE
Trang 35Gọi Stored Procedure
Khái niệm Stored Procedure
Định nghĩa Stored Procedure – SP:
• SP là 1 thủ tục được định nghĩa trước và
được lưu trữ trong CSDL để người dùng sẵn sàng dùng
Đặc điểm của SP
• SQL Server biên dịch Stored Procedure
• Gọi SP chạy sẽ nhanh hơn việc xây dựng câu
truy vấn trong code
• SP bảo mật hơn
Trang 36Gọi Stored Procedure
Tạo Stored Procedure – SP
Cú pháp tạo SP
CREATE PROCEDURE usp_TenSP
/*
(
@parameter1 datatype = defaultvalue,
@parameter2 datatype OUTPUT
Trang 37Gọi Stored Procedure
Gọi SP không có tham số
2 bước gọi SP không tham số:
• Bước 1: Chỉ rõ tên SP trong thuộc tính
CommandText của đối tượng Command
SqlCommand cmd;
…
cmd.CommandText = “usp_TenStoredProcedure”
• Bước 2: Chỉ cho đối tượng Command biết
chúng ta đang muốn thực thi 1 Stored Procedure
cmd.CommandType = CommandType StoredProcedure
Trang 38Gọi Stored Procedure
Gọi SP không có tham số
Ví dụ: create procedure usp_LayDSNhanVien
as
select * from NhanVien
return
string strSP = “usp_LayDSNhanVien”;
SqlCommand cmd = new SqlCommand (strSP, conn);
cmd.CommandType = CommandType StoredProcedure;
SqlDataAdapter daNhanVien = new SqlDataAdapter (cmd);
DataTable dtNhanVien = new DataTable ();
daNhanVien.Fill(dtNhanVien);
// Cách 2
Trang 39Gọi Stored Procedure
Gọi SP có tham số input (vào)
3 bước gọi SP có tham số input:
• Bước 1, 2: giống như trước
• Bước 3: Thêm đối tượng tham số
SqlParameter vào đối tượng command (Tên tham số giống tên tham số trong SP)
cmd.Parameters.Add(“@TenThamSo”, kieu, kichthuoc);
cmd.Parameters[“@TenThamSo”].value = giatri;
Trang 40Gọi Stored Procedure
Gọi SP có tham số input (vào)
Ví dụ:
string sqlSP = "usp_TimNhanVienTheoTen";
conn = new SqlConnection (strConn);
SqlCommand cmd = new SqlCommand (sqlSP, conn);
cmd.CommandType = CommandType StoredProcedure;
create procedure usp_TimNhanVienTheoTen
(@ten nvarchar (20))
as
select * from NhanVien
where ten = @ten return
Trang 41Gọi Stored Procedure
Gọi SP có tham số output (ra)
Tương tự SP có tham số input
• Nhưng bước 3 phải chỉ rõ tham số nào là
output bằng thuộc tính Direction của đối tượng SqlParameter
SqlParameter param;
… param.Direction = ParameterDirection.Output
Trang 42Gọi Stored Procedure
Gọi SP có tham số output (ra)
Ví dụ:
create procedure usp_TimTenNhanVienTheoMa
(@manv nvarcha r(20), @ten nvarchar (20) output )
Trang 43Gọi Stored Procedure
Gọi SP có tham số output (ra)
string sqlSP = "usp_TimTenNhanVienTheoMa";
conn = new SqlConnection(strConn);
SqlCommand cmd = new SqlCommand (sqlSP, conn);
cmd.CommandType = CommandType StoredProcedure;
SqlParameter paramTen = new SqlParameter ();
paramTen.Direction = ParameterDirection Output;
Trang 44Tóm tắt chương 2