Tải bản đầy đủ (.pptx) (22 trang)

Bài giảng Lập trình trên Windows: Chương 5.4 - Trần Minh Thái

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 (85.63 KB, 22 trang )

Lập trình Windows
Chương 5.4. Truy vấn có tham số

1


Nội dung

• Nhu cầu cần có truy vấn có tham số
• Các bước tạo truy vấn có tham số
• Gọi Stored Procedure

2


Nhu cầu cần có truy vấn có tham số
• Tìm kiếm các dòng dữ liệu trong CSDL theo một điều kiện nào đó do
người dùng nhập vào
• Ví dụ: Tìm kiếm xem nhân viên có trong CSDL để 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 + "'";

3



Nhu cầu cần có truy vấn có tham số

• Những vị trí lệnh SQL cần dữ liệu người dùng (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)

4


Các bước tạo truy vấn có tham số
• Bước 1: Xây dựng 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

5


Cá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
Parameter
placeholder

 Cú pháp:
strSQL = "select … where cot1 = @ten1 …"


 Ví dụ:
strSQL = "select * from NhanVien where " +
“manv=@user and matkhau=@pass";
6


Cá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

 Cú pháp:
SqlParameter param;
param
param
param
param

=
=
=
=

new
new
new
new

SqlParameter();
SqlParameter(string paramName, object value);
SqlParameter(string paramName, SqlDbType dbType);

SqlParameter(string paramName, SqlDbType dbType, int size);

7


Cá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
– Bit = Boolean
– DateTime = DateTime

8


Cá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

9


Cá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;

10


Cá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 SqlCommand

SqlCommand cmd;
SqlParameter param;

cmd.Parameters.Add(param);
cmd.Parameters.Add(string paramName, SqlDbType dbType);
cmd.Parameters.Add(string paramName, SqlDbType dbType, int size);

11


Gọi Stored Procedure

• Khái niệm Stored Procedure – SP

• Tạo Stored Procedure
• Gọi SP khơng có tham số
• Gọi SP có tham số input (vào)
• Gọi SP có tham số output (ra)

12


Gọi Stored Procedure
Khái niệm Stored Procedure
• 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

13


Gọi Stored Procedure
Tạo Stored Procedure – SP
• Cú pháp tạo SP
CREATE PROCEDURE usp_TenSP
/*
(
@parameter1 datatype = defaultvalue,
@parameter2 datatype OUTPUT
)
*/

AS
/* SET NOCOUNT ON */
RETURN

14


Gọ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
15


Gọ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
//conn.Open();
//SqlDataReader dr = cmd.ExecuteReader();
16


Gọ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;

17


Gọi Stored Procedure
Gọi SP có tham số input (vào)

• Ví dụ:

create procedure usp_TimNhanVienTheoTen
(@ten nvarchar(20))
as
select * from NhanVien
where ten = @ten
return

string sqlSP = "usp_TimNhanVienTheoTen";
conn = new SqlConnection(strConn);
SqlCommand cmd = new SqlCommand(sqlSP, conn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@Ten", SqlDbType.NVarChar, 20);
cmd.Parameters["@Ten"].Value=giatri;

18


Gọ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

19



Gọi Stored Procedure
Gọi SP có tham số output (ra)
• Ví dụ:
create procedure usp_TimTenNhanVienTheoMa
(@manv nvarchar(20), @ten nvarchar(20) output)
as
select @ten=ten
from NhanVien
where manv=@manv
return

20


Gọ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;
paramTen.ParameterName ="@ten";
paramTen.SqlDbType = SqlDbType.NVarChar;
paramTen.Size = 20;
cmd.Parameters.Add(paramTen);
cmd.Parameters.Add("@MaNV", SqlDbType.NVarChar, 20);
cmd.Parameters["@MaNV"].Value = "NV001";

conn.Open();
cmd.ExecuteReader();
conn.Close();
string ten = cmd.Parameters["@ten"].Value.ToString();

21


Q&A

22 22



×