Bài 3: Cấu trúc điều khiển, hàm và xử lý sự kiện - Giáo trình FPTMasterCode.vn
Cấu trúc điều khiển (tiếp)
Cấu trúc lựa chọn
Lệnh lựa chọn kép
Lệnh đa lựa chọn
Cấu trúc lặp
Lặp không biết trước số lần lặp
Lặp biết trước số lần lặp
Hàm
Phạm vi biến
Mảng
Xử lý sự kiện
Cấu trúc điều khiển (tiếp)
Cấu trúc lựa chọn
Lệnh lựa chọn kép
Lệnh đa lựa chọn
Cấu trúc lặp
Lặp không biết trước số lần lặp
Lặp biết trước số lần lặp
Hàm
Phạm vi biến
Mảng
Xử lý sự kiện
Lựa chọn thuộc tính và Khai phá luật kết hợp trên WEKAHo Quang Thanh
Báo cáo này sẽ hướng dẫn: lựa chọn thuộc tính và Khai phá luật kết hợp trên WEKA. Chi tiết thêm về dataset xin mời truy cập blog của chúng tôi tại: http://bit.ly/weka-luat-ket-hop
Bài 4: STORED PROCEDURE & GIAO DỊCH - Giáo trình FPTMasterCode.vn
Stored Procedure là một tập các câu lệnh T -SQL thực
hiện một nhiệm vụ cụ thể, được đặt tên và lưu trữ
trong CSDL dưới dạng đã biên dịch.
Stored procedure cung cấp một phương pháp hữu ích
cho việc thực thi lặp lại cùng một nhiệm vụ
Giúp tái sử dụng code
Khi thực thi lại một nhiệm vụ, sử dụng lời gọi Stored
Procedure thay vì viết và thực thi lại cùng một tập hợp các
câu lệnh.
Cách sử dụng các biến, cấu trúc điều khiển trong
Stored Procedure tương tự như mã kịch bản
Bài 3: Cấu trúc điều khiển, hàm và xử lý sự kiện - Giáo trình FPTMasterCode.vn
Cấu trúc điều khiển (tiếp)
Cấu trúc lựa chọn
Lệnh lựa chọn kép
Lệnh đa lựa chọn
Cấu trúc lặp
Lặp không biết trước số lần lặp
Lặp biết trước số lần lặp
Hàm
Phạm vi biến
Mảng
Xử lý sự kiện
Cấu trúc điều khiển (tiếp)
Cấu trúc lựa chọn
Lệnh lựa chọn kép
Lệnh đa lựa chọn
Cấu trúc lặp
Lặp không biết trước số lần lặp
Lặp biết trước số lần lặp
Hàm
Phạm vi biến
Mảng
Xử lý sự kiện
Lựa chọn thuộc tính và Khai phá luật kết hợp trên WEKAHo Quang Thanh
Báo cáo này sẽ hướng dẫn: lựa chọn thuộc tính và Khai phá luật kết hợp trên WEKA. Chi tiết thêm về dataset xin mời truy cập blog của chúng tôi tại: http://bit.ly/weka-luat-ket-hop
Bài 4: STORED PROCEDURE & GIAO DỊCH - Giáo trình FPTMasterCode.vn
Stored Procedure là một tập các câu lệnh T -SQL thực
hiện một nhiệm vụ cụ thể, được đặt tên và lưu trữ
trong CSDL dưới dạng đã biên dịch.
Stored procedure cung cấp một phương pháp hữu ích
cho việc thực thi lặp lại cùng một nhiệm vụ
Giúp tái sử dụng code
Khi thực thi lại một nhiệm vụ, sử dụng lời gọi Stored
Procedure thay vì viết và thực thi lại cùng một tập hợp các
câu lệnh.
Cách sử dụng các biến, cấu trúc điều khiển trong
Stored Procedure tương tự như mã kịch bản
Smartbiz_He thong MES nganh may mac_2024juneSmartBiz
Cách Hệ thống MES giúp tối ưu Quản lý Sản xuất trong ngành May mặc như thế nào?
Ngành may mặc, với đặc thù luôn thay đổi theo xu hướng thị trường và đòi hỏi cao về chất lượng, đang ngày càng cần những giải pháp công nghệ tiên tiến để duy trì sự cạnh tranh. Bạn đã bao giờ tự hỏi làm thế nào mà những thương hiệu hàng đầu có thể sản xuất hàng triệu sản phẩm với độ chính xác gần như tuyệt đối và thời gian giao hàng nhanh chóng? Bí mật nằm ở hệ thống Quản lý Sản xuất (MES - Manufacturing Execution System).
Hãy cùng khám phá cách hệ thống MES đang cách mạng hóa ngành may mặc và mang lại những lợi ích vượt trội như thế nào.
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
6. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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
…
24. 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. 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
26. 26
Nhu 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)
27. 27
Cá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
28. 28
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
strSQL = "select … where cot1 = @ten1 …"
Ví dụ:
Cú pháp:
strSQL = "select * from NhanVien where " +
“manv=@user and matkhau=@pass";
Parameter
placeholder
29. 29
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
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:
30. 30
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
31. 31
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
32. 32
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;
33. 33
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);
35. 35
Gọ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
36. 36
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
37. 37
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
38. 38
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();
39. 39
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;
40. 40
Gọ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;
cmd.Parameters.Add("@Ten", SqlDbType.NVarChar, 20);
cmd.Parameters["@Ten"].Value=giatri;
create procedure usp_TimNhanVienTheoTen
(@ten nvarchar(20))
as
select * from NhanVien
where ten = @ten
return
41. 41
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
42. 42
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
43. 43
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();
Data Manipulation Language
Data Definition Language
Kiem tra xem select khóa chinh có tra ve 1 giá trị hay không
Select 1cot
From bang
Where cot_khoa_chinh = giaitr
Select 1cot
From bang
Where cot_duynhat = giaitr
Truy cập theo so thu tu se nhanh hon ten cot
Dinh dang dữ liệu
String.Format(“{0} {1}”, …);
using System.Data.Common;
BigIntInt64. A 64-bit signed integer.
BinaryArray of type Byte. A fixed-length stream of binary data ranging between 1 and 8,000 bytes.
BitBoolean. An unsigned numeric value that can be 0, 1, or nullNothingnullptra null reference (Nothing in Visual Basic).
CharString. A fixed-length stream of non-Unicode characters ranging between 1 and 8,000 characters.
DateTimeDateTime. Date and time data ranging in value from January 1, 1753 to December 31, 9999 to an accuracy of 3.33 milliseconds.
DecimalDecimal. A fixed precision and scale numeric value between -10 38 -1 and 10 38 -1.
FloatDouble. A floating point number within the range of -1.79E +308 through 1.79E +308.
ImageArray of type Byte. A variable-length stream of binary data ranging from 0 to 2 31 -1 (or 2,147,483,647) bytes.
IntInt32. A 32-bit signed integer.
MoneyDecimal. A currency value ranging from -2 63 (or -9,223,372,036,854,775,808) to 2 63 -1 (or +9,223,372,036,854,775,807) with an accuracy to a ten-thousandth of a currency unit.
NCharString. A fixed-length stream of Unicode characters ranging between 1 and 4,000 characters.
NTextString. A variable-length stream of Unicode data with a maximum length of 2 30 - 1 (or 1,073,741,823) characters.
NVarCharString. A variable-length stream of Unicode characters ranging between 1 and 4,000 characters. Implicit conversion fails if the string is greater than 4,000 characters. Explicitly set the object when working with strings longer than 4,000 characters.
RealSingle. A floating point number within the range of -3.40E +38 through 3.40E +38.
UniqueIdentifierGuid. A globally unique identifier (or GUID).
SmallDateTimeDateTime. Date and time data ranging in value from January 1, 1900 to June 6, 2079 to an accuracy of one minute.
SmallIntInt16. A 16-bit signed integer.
SmallMoneyDecimal. A currency value ranging from -214,748.3648 to +214,748.3647 with an accuracy to a ten-thousandth of a currency unit.
TextString. A variable-length stream of non-Unicode data with a maximum length of 2 31 -1 (or 2,147,483,647) characters.
TimestampArray of type Byte. Automatically generated binary numbers, which are guaranteed to be unique within a database. timestamp is used typically as a mechanism for version-stamping table rows. The storage size is 8 bytes.
TinyIntByte. An 8-bit unsigned integer.
VarBinaryArray of type Byte. A variable-length stream of binary data ranging between 1 and 8,000 bytes. Implicit conversion fails if the byte array is greater than 8,000 bytes. Explicitly set the object when working with byte arrays larger than 8,000 bytes.
VarCharString. A variable-length stream of non-Unicode characters ranging between 1 and 8,000 characters.
VariantObject. A special data type that can contain numeric, string, binary, or date data as well as the SQL Server values Empty and Null, which is assumed if no other type is declared.
XmlAn XML value. Obtain the XML as a string using the GetValue method or Value property, or as an XmlReader by calling the CreateReader method.
UdtA SQL Server 2005 user-defined type (UDT).
StructuredA special data type for specifying structured data contained in table-valued parameters.
DateDate data ranging in value from January 1,1 AD through December 31, 9999 AD.
TimeTime data based on a 24-hour clock. Time value range is 00:00:00 through 23:59:59.9999999 with an accuracy of 100 nanoseconds.
DateTime2Date and time data. Date value range is from January 1,1 AD through December 31, 9999 AD. Time value range is 00:00:00 through 23:59:59.9999999 with an accuracy of 100 nanoseconds.
DateTimeOffsetDate and time data with time zone awareness. Date value range is from January 1,1 AD through December 31, 9999 AD. Time value range is 00:00:00 through 23:59:59.9999999 with an accuracy of 100 nanoseconds. Time zone value range is -14:00 through +14:00.