DẠNG WEB APPLICATIONTrình điều khiển SQL SERVER SQLDatabase SQL-server SERVER 1 SERVER 2 Web application trình ứng dụng html,asp, aspx,img… Trình điều khiểnTruy cập WebIIS, PWS… HTTP-ser
Trang 2• Phần lớn các phần mềm hiện nay đều là các hệ quản trị cơ
sở dữ liệu.
• Tại VN, trước đây nó được lập trình bằng dBASE, FoxPro,
Access Hiện nay, người ta có xu hướng sử dụng NET hơn
vì nhiều lý do (công nghệ, font chữ…)
• Tùy theo điều kiện (loại mạng, loại đường truyền, loại tác
vụ, kinh phí…) mà người lập trình quyết định giải pháp là desktop application hay web application.
• Các công đoạn để thiết kế một phần mềm
Mở đầu
Trang 3Tìm hiểu yêu cầu bài toán
Khảo sát thực tế (cơ sở vật chất, trình độ sử dụng, quy mô bài toán, tổ chức hành chính )
Phân tích, Mô hình hoá bài toán, Xây dựng hệ
thống
Tìm kiếm giải pháp (thuật toán, kỹ thuật xử lý )
cho mỗi khối trong hệ thống
Coding
Kiểm định với Bộ dữ liệu giả
Kiểm định với Bộ dữ liệu thực
Trang 4Các dạng ứng dụng điển hình
mô hình Client-Server hiện nay
Trang 5Trình điều khiển
SQL SERVER
SQLDatabase
SQL-server
SERVER
DẠNG DESKTOP APPLICATION
- Ưu điểm và nhược điểm?
- Khi nào thì nên sử dụng dạng này?
Chương trình ứng dụng cài trên desktop (PC)
Thao tác dữ liệu chủ yếu bằng các
control dạng Form
Trung tâm Dữ liệu
Tương tác trên chương trình ứng dụng
Trang 6DẠNG WEB APPLICATION
Trình điều khiển
SQL SERVER
SQLDatabase
SQL-server
SERVER 1
SERVER 2
Web application (trình ứng dụng)
(html,asp, aspx,img…)
Trình điều khiểnTruy cập Web(IIS, PWS…)
HTTP-server
Truy cập dữ liệu theo
yêu cầu của web page
CLIENT
Y/C web page (GET/POST)
Trả về dạng web page (html)
Web browsers
(IE, FireFox…)
Thao tác dữ liệu chủ yếu bằng các
control dạng Web
- Ưu điểm và nhược điểm?
- Khi nào thì nên sử dụng
dạng này?
WEBSITE
Tương tác trên Web browser
Trang 7DẠNG WEB SERVICES APPLICATION
Trình điều khiển
SQL SERVER
SQLDatabase
SQL-server
SERVER 1
SERVER 2
Trình điều khiểnTruy cập Web(IIS, PWS…)
HTTP-server
Truy cập dữ liệu theo
yêu cầu của web page
CLIENT
Y/C dịch vụ S (services)
Trả kết quả về dạng SOAP-
Simple Object Access Protocol)
(XML)
- Ưu điểm và nhược điểm?
- Khi nào thì nên sử dụng
dạng này?
WEBSITE
Web ServicesS1,S2,S3…
Chương trình ứng dụng (desktop hoặc Web application)
Tương tác trên chương trình ứng dụng
Trang 9Một số vấn đề về SQL-server
1
Trang 10Cài đặt SQL-Server
- MS SQL-SERVER: Trình điều khiển SQL-server cài trên máy server
(nhiều dạng (Professional, Personal ) nhiều version (2000,2003,2005,2008…))
- MSDE (Microsoft Desktop Enginner): SQL-server cài trên desktop
Start : SQL-server tiếp nhận các
yêu cầu và xử lý yêu cầu từ client
Trang 11SQL-database 1 Datagrams: Các lược đồ về CSDL
2 Tables : Các bảng dữ liệu
3 Views: Mỗi “view” tương đương với một lệnh
SELECT được dựng sẳn
4 Stored Procedures : Các chương trình con
(thủ tục) viết bằng ngôn ngữ Transact-SQL sẽ được thực hiện tại Server
5 Users : Danh sách tài khoản người sử dụng
10.User Defined Functions : Các hàm viết bằng
ngôn ngữ Transact-SQL được thực hiện tại server
Trang 12Cách thức truy xuất SQL-server:
Bước 1: Thực hiện thủ tục kết nối (connect) với Database D
Bước 2: Dãy lệnh giao dịch dữ liệu:
Chuyển yêu cầu (Y) đến SQL-server Nhận kết quả mà SQL-server trả lại (Q)
Bước 3: Cắt kết nối (disconnect) với database D
Chú ý: Yêu cầu Y phải viết bằng ngôn ngữ Transact-SQL thì SQL mới “hiểu” được
Trang 13Làm thế nào để kết nối với một
database trong SQL server ?
Phải gửi đến Server chuổi mô tả kết nối (Stringconnect), chuổi này phải chỉ ra:
- Địa chỉ SQL server:
Data source = ? (localhost/tên server/điạ chỉ IP)
- Tên database cần kết nối :
Initial Catalog = ? (tên database)
- Xác định quyền truy xuất:
Integrated Security=? (true/false)
(sử dụng luôn Windows account
User ID, Password=? (username, password)
(sử dụng SQL server account)
Trang 14Ví dụ:
Khi SQL server trên cùng máy với tính ứng dụng:
(1) Sử dụng luôn Windows account :
Data Source= localhost ;Initial Catalog= QLSV ;Integrated Security= True
(2) Sử dụng SQL server account :
Data Source= localhost ;Initial Catalog= QLSV ;User ID= minh ; Password= 123456 ; Trusted_Connection=False
Trang 15Khi SQL server trên máy tính từ xa:
Nói chung không sử dụng Integrated Security= True ?
(1) Kết nối theo tên server (thường cho mạng LAN)
Data Source= DHSPHUE ;Initial Catalog= QLSV ;User ID= minh ;Password= 123456 ; Trusted_Connection=False"
(2) Kết nối theo điạ chỉ IP (thường trong các mạng sử dụng TCP/IP như Internet)
Data Source= 203.65.001.001:1433 ;Network Library= DBMSSOCN ;
Initial Catalog= QLSV ;User ID= minh ;Password= 12345 ;
Trusted_Connection=False
Trang 16Yêu cầu đến SQL-server thường là:
Client có thể gửi đến SQL-server các loại yêu cầu viết theo cú pháp của Transact-SQL:
1 Các lệnh thiết lập môi trường cho SQL server
SET…
Kết quả trả về: Chỉ thị thành công/lỗi
2 Các lệnh tạo lập cấu trúc cơ sở dư liệu
CREATE DATABASE…,CREATE TABLE…,DROP TABLE…, ALTER TABLE … CREATE PROCEDURE , CREATE FUNCTION
5 Các lệnh yêu cầu thực thi một Stored Procedure/User Defined Function
hoặc một hàm tạo sẵn của hệ thống
EXEC…
Kết quả trả về: + Chỉ thị thành công/lỗi
+ Giá trị hàm/thủ tục (một giá trị đơn, cursor)
Trang 17Một ví dụ nhỏ (VB.NET):
Khai báo các biến
Dim cn As SqlConnection Dim cmd As SqlCommand Dim da As New SqlDataAdapter Dim ds As New DataSet
Khai báo và mở kết nối
cn = New SqlConnection("Data Source = NLTHUC; Initial Catalog = QLSV; _
User ID = minh; Password=123456; Trusted_Connection=False" )
cn.Open()
Thực hiện thiết lập môi trường
cmd = New SqlCommand("SET DATEFORMAT dmy", cn) cmd.ExecuteNonQuery()
cmd.Dispose()
Thực hiện truy vấn toàn bộ table hoso của database QLSV
cmd = New SqlCommand(“SELECT * FROM hoso”, cn) da.SelectCommand = cmd
da.Fill(ds, “hoso”) da.Dispose() cmd.Dispose()
…xử lý dữ liệu từ datatable ds.Table(“hoso”)
Cắt kết nối
cn.Close()
Trang 18Vấn đề gì cần phải quan tâm?
1 Học ngôn ngữ Transact-SQL của SQL server
SQL server chỉ có thể “hiểu” các yêu cầu cũng như các hàm/thủ tục được viết bằng ngôn ngữ Transact-SQL
2 Tập theo tác trên một số tiện ích như Interprise Manager
Không nhất thiết tất cả phải qua lập trình Chẳng hạn, việc tạo cấu trúc cho một database (khai báo table, stored procedure/UDF) có thể thao tác bằng tay thông qua các tiện ích này
3 Làm thế nào, sử dụng hàm gì của các ngôn ngữ lập trình (như VB, VFP, NET…) để giao tiếp với SQL server ?
Cách thức chung nhưng cú pháp lệnh, hình thức mô tả có thể khác nhau chút ít giữa các ngôn ngữ lập trình
4 Thiết kế một ứng dụng CSDL thực tế như thế nào?
Mục tiêu cuối cùng hướng đến Thực chất, nó không khó vì bản chất là giống nhau Chỉ khác về cách trình bày
Trang 19Ngôn ngữ Transact-SQL
2
Trang 20float Số thực -1.79E + 308 - 1.79E + 308.
real Số thực -3.40E + 38 - 3.40E + 38.
datetime Date and time data từ 01/01/1753 – 31/12/9999
smalldatetime Date and time data từ 01/01/1900 – 06/06/2079.
char Chuổi độ dài cố định không Unicode (<=8,000 characters)
varchar Chuổi độ dài biến đổi không Unicode (<=8,000 characters).
Trang 21text Chuổi độ dài biến đổi không Unicode (length of 2^31 - 1 (2,147,483,647) characters.
nchar Chuổi độ dài côs định Unicode (<=4,000 characters)
nvarchar Chuổi độ dài biến đổi Unicode (<=4,000 characters)
ntext Chuổi độ dài biến đổi (lên đến 1,073,741,823 ký tự).
binary Dữ liệu binary độ dài cố định (<= 8,000 bytes).
varbinary Dữ liệu binary độ dài biến đổi (<= 8,000 bytes).
image Dữ liệu binary độ dài biến đổi (<= 2,147,483,647 bytes).
cursor Một tham chiếu đến cursor.
sql_variant Một kiểu dữ liệu chứa các giá trị bất kỳ được hỗ trở bởi SQL Server, trừ các kiểu text,
ntext, timestamp, và sql_variant.
table Một kiểu dữ liệu đặc biệt được sử dụng để chứa một tập kết quả
timestamp A database-wide unique number that gets updated every time a row gets updated.
uniqueidentifi
er Một giá trị định danh duy nhất (globally unique identifier (GUID)).
Trang 23Toán tử nối chuổi (+)
Ví dụ: 'abc' + '' + 'def' sẽ là chuổi 'abcdef'
Trang 24Các hàm
Các hàm toán học ABS DEGREES RAND
ASIN FLOOR SIGN
ATN2 LOG10 SQUARE CEILING PI SQRT
COT RADIANS
Các hàm ngày và giờ
DATEADD DATEDIFF DATENAME DATEPART DAY
GETDATE GETUTCDATE MONTH
YEAR
Trang 25Các hàm về chuổi
ASCII NCHAR SOUNDEX CHAR PATINDEX SPACE
CHARINDEX REPLACE STR
DIFFERENCE QUOTENAME STUFF
LEFT REPLICATE SUBSTRING LEN REVERSE UNICODE
LTRIM RTRIM
Các hàm chuyển đổi kiểu
CAST ( expression AS data_type )
CONVERT ( data_type [ ( length ) ] , expression [ , style ] )
Trang 26Các câu lệnh SQL
CREATE DATABASE : Tạo database
Ví dụ: Tạo một database có tên là QLCC với các file được chỉ ra
USE master GO
CREATE DATABASE QLCC
ON ( NAME = qlcc_dat, FILENAME = 'c:\qlcc_data.mdf' )
LOG ON ( NAME = ‘qlcc_log', FILENAME = 'c:\qlcc_log.ldf' )
GO
ALTER DATABASE : Sửa đổi database
DROP DATABASE : Loại bỏ database
Trang 27CREATE TABLE : Tạo một table cho database
hoten nvarchar(50) NOT NULL DEFAULT ‘’,
ngsinh char(10) NOT NULL DEFAULT ‘’,
hesolg decimal NOT NULL CHECK (hslg>=2.5 AND hslg<=6.0) donvi char(2) NOT NULL DÈAULT ‘’
)
GO
Ví dụ: Tạo table hoso cho database QLCC
ALTER TABLE : Sửa đổi một table
DROP TABLE : Loại bỏ một table
Trang 28INSERT: Chèn thêm một bản ghi mới
Trang 29[ GROUP BY group_by_expression [ HAVING search_condition ]
[ ORDER BY order_expression [ ASC | DESC ] ]
Toán tử UNION có thể được sử dụng giữa hai truy vấn để hợp hai tập kết
quả truy vấn thành một tập
Ví dụ:
USE QLCC
GO
SELECT * FROM hoso
SELECT hoten,hslg FROM hoso WHERE donvi=‘KT’
SELECT donvi,COUNT(*) as ‘songuoi’, SUM(hslg) as ‘tonghslg’ FROM hoso
GROUP BY donvi HAVING songuoi>=5 ORDER BY donvi
Trang 30Cấu trúc điều khiển
BEGIN END Định nghĩa một khổi lệnh
BREAK Thoát khỏi vòng lặp WHILE gần nhất
CONTINUE Quay lên lại đầu vòng lặp WHILE
GOTO label Nhảy đến lệnh sau nhãn label
IF ELSE Lệnh điều kiện
RETURN Thoát không điều kiện khỏi một hàm/thủ tục
WAITFOR Đặt một khoảng thời giản để tiếp tục
WHILE Vòng lặp với điều kiện là TRUE.
Một số lệnh khác sử dụng với cấu trúc điều khiển
/* */ : Đoạn chú thích : Chú thích trên dòng
DECLARE : Khai báo biến cục bộ
EXECUTE : Gọi thực hiện một thủ tục
PRINT : Trả một kết quả về cho client
CASE : Cho giá trị của biểu thức tùy theo điều kiện
Trang 31USE QLCC GO
DECLARE @dv char(2)
SET @dv = ‘KT‘
Trích những người có đơn vị không thuộc KT
DECLARE trich CURSOR FOR SELECT maso, hslg FROM hoso WHERE donvi<>@dv
DECLARE @m char(10 ), @v decimal
OPEN trich
dọc dòng đầu tiên của cursor
FETCH NEXT FROM trich INTO @m, @v
duyệt cursor
WHILE @@Fetch_Status = 0 BEGIN
IF @v<3.0 UPDATE hoso SET hslg= @v+1.0 WHERE maso=@m ELSE
UPDATE hoso SET hslg= @v+0.5 WHERE maso=@m dọc dòng tiếp theo
FETCH NEXT FROM trich INTO @m, @v END
CLOSE trich
Một ví dụ về cấu trúc điều khiển:
Trang 32Thủ tục (Stored Procedures)
Cú pháp tạo một thủ tục
CREATE PROCEDURE [owner.]ProcedureName
( @ParameterName1 DataType, @ParameterName2 DataType, @ParameterName_n DataType )
AS BEGIN
Các dòng lệnh của thủ tục
END
Gọi thực hiện một thủ tục
EXEC ProcedureName ParameterValue1, ParameterValue2 , ParameterValue_n
EXECUTE ProcedureName ParameterValue1, ParameterValue2 , ParameterValue_n
Loại bỏ một thủ tục
DROP PROCEDURE ProcedureName
Trang 33Ví dụ 1: Thủ tục không tham số
CREATE PROCEDURE dbo.GanHesoAS
BEGIN UPDATE hoso SET hslg=2.5 WHERE donvi=‘KT’END
EXECUTE dbo.GanHeso
Gọi thực hiện nó:
Trang 34Ví dụ 2: Thủ tục có tham số
CREATE PROCEDURE dbo.GanHeso (@h decimal, @d char(2)) AS
BEGIN UPDATE hoso SET hslg=@h WHERE donvi=@d END
BEGIN UPDATE hoso SET hslg=@h WHERE donvi=@d END
Trang 35Nhận các giá trị sau khi thực hiện thủ tục:
Cách 1: Sử dụng tham số kiểu OUTPUT
CREATE PROCEDURE dbo.Tinh (
@d char(2) =‘’ , @n int OUTPUT , @S decimal OUTPUT )
AS BEGIN
Trang 36Cách 2: Sử dụng cursor như là một lệnh truy vấn
CREATE PROCEDURE dbo.Tinh (
@d char(2) =‘’
) AS BEGIN DECLARE @n int , @S decimal
SELECT @n AS ‘songuoi’, @S AS ‘tonglcb’
Trang 37Hàm tự định nghĩa (User Defined Function)
Cú pháp tạo một hàm
( @ParameterName1 DataType, @ParameterName2 DataType, @ParameterName_n DataType )
RETURNS (kiểu giá trị trả lại)
AS BEGIN Các câu lệnh của hàm
RETURN (giá trị trả lại của hàm)
END
Gọi một hàm
[Owner.]FunctionName( Danh sách các đối số của tham số )
Trang 38Ví dụ 1: Hàm trả lại một giá trị đơn (hàm vô hướng)
CREATE FUNCTION dbo.TinhTongLcb ( @d char(2) ) RETURN decimal
AS BEGIN DECLARE @S decimal
RETURN (@S) END
CREATE FUNCTION dbo.TinhTongLcb ( @d char(2) ) RETURN decimal
AS BEGIN
Trang 39Ví dụ 2: Giá trị của hàm là một bảng từ kết quả truy vấn
USE QLCC GO
( @d Char(2) )
AS BEGIN
RETURN ( SELECT hoten,ngsinh FROM hoso WHERE donvi =@d ) END
Gọi thực hiện nó:
SELECT * FROM dbo.Danhsach(“KT”)
Trang 40Ví dụ 3: Giá trị của hàm là một bảng với định nghĩa cấu trúc
CREATE FUNCTION dbo.ThongKe
( @d Char(2) )
RETURNS @ketqua TABLE ( Muc nvarchar(50), Giatri decimal)
AS
BEGIN
DECLARE @n int , @S decimal
SELECT @n = COUNT(*) FROM hoso WHERE donvi=@d
SELECT @S = SUM(hslg*300000) FROM hoso WHERE donvi=@d
INSERT INTO @ketqua (Muc,Giatri) Values (‘Số người’,@n)
INSERT INTO @ketqua (Muc,Giatri) Values (‘Tổng lương cơ bản’,@S)
INSERT INTO @ketqua SELECT ‘Số người’,COUNT(*) FROM hoso WHERE donvi=@d
INSERT INTO @ketqua SELECT ‘Tổng lương cơ bản’,SUM(hslg*300000) FROM hoso _ WHERE donvi=@d RETURN