Đề cương chi tiết bài giảng Thực tập cơ sở dữ liệu

Tuần 1. Bài thực hành số 1: Thực hành làm quen và sử dụng được hệ quản trị cơ

sở dữ liệu SQL Server.

Mục đích: Giúp sinh viên làm quen và sử dụng được hệ quản trị cơ sở dữ liệu SQL

Server.

Yêu cầu: Tạo cơ sở dữ liệu, tạo bảng, nhập dữ liệu vào bảng.

(Sinh viên đọc tài liệu tham khảo Giáo trình SQL Server từ trang 6-71, slide bài

giảng Chương2_Mô hình liên kết thực thể, mô hình quan hệ, chương 5_Hệ quản trị

SQL Server)

- Hình thức tổ chức dạy học: Thực hành

- Thời gian: 6-12t

- Địa điểm: Phòng máy K12

- Nội dung chính:

I. Tóm tắt lý thuyết:

Tạo cơ sở dữ liệu2

Theo lý thuyết cơ sở dữ liệu, trước khi tạo CSDL ta phải thực hiện phân tích

các thông tin liên quan mục đích sử dụng CSDL cho ài toán của mình: Tên CSDL, các

table, ràng buộc, tuân theo các chuẩn CSDL (phần này sẽ bàn kỹ trong bài sau)

Tạo theo công cụ:

- Vào Enterprise Manager -> Databases.

- Nhấn nút phải chuột/hoặc menu Action -> New Database

Tạo bảng dữ liệu:

Table (bảng dữ liệu) là một thành phần cơ bản của CSDL, một CSDL được

thiết kế từ một hoặc nhiều bảng dữ liệu, mỗi bảng dữ liệu được cấu trúc từ các hàng và

cột dữ liệu, mỗi hàng dùng mô tả một đối tượng, vấn đề, sự kiện,. cột thể hiện thuộc

tính của các đối tượng, sự kiện,. của hàng. Dữ liệu cùng cột có cùng kiểu (data type).

Ngoài các hàng, cột bảng còn có các khóa, liên kết, ràng buộc,.

Trước khi bắt tay vào thiết lập bảng dữ liệu trước hết ta phải xác định xem bảng

sẽ xây dựng như thế nào, dựa trên một số thông tin sau:

- Kiểu dữ liệu trong bảng.

- Các cột, kiểu dữ liệu tương ứng (và độ dài nếu cần thiết).

- Cột nào cho phép giá trị NULL (là giá trị mà phần dữ liệu thuộc hàng, cột xác

định không được gán giá trị nào, vì vậy nên 2 phần tử có cùng giá trị NULL là không

bằng nhau).

- Giá trị ngầm định (là giá trị mà khi chưa nhập vào nó nhận giá trị này).

- Chỉ số Index, khóa chính, khóa ngoài.

Kiểu dữ liệu

SQL Server gồm những kiểu dữ liệu sau:

 Integers

 Bigint: 8 bytes

 Int: 4 bytes

 Smallint: 2 bytes

 Tinyint: 1 byte, từ 0 -> 255.

 bit

 Bit: 1 hoặc 0 value.

 decimal and numeric

Đề cương chi tiết bài giảng Thực tập cơ sở dữ liệu trang 1

Trang 1

Đề cương chi tiết bài giảng Thực tập cơ sở dữ liệu trang 2

Trang 2

Đề cương chi tiết bài giảng Thực tập cơ sở dữ liệu trang 3

Trang 3

Đề cương chi tiết bài giảng Thực tập cơ sở dữ liệu trang 4

Trang 4

Đề cương chi tiết bài giảng Thực tập cơ sở dữ liệu trang 5

Trang 5

Đề cương chi tiết bài giảng Thực tập cơ sở dữ liệu trang 6

Trang 6

Đề cương chi tiết bài giảng Thực tập cơ sở dữ liệu trang 7

Trang 7

Đề cương chi tiết bài giảng Thực tập cơ sở dữ liệu trang 8

Trang 8

Đề cương chi tiết bài giảng Thực tập cơ sở dữ liệu trang 9

Trang 9

Đề cương chi tiết bài giảng Thực tập cơ sở dữ liệu trang 10

Trang 10

Tải về để xem bản đầy đủ

pdf 67 trang xuanhieu 9160
Bạn đang xem 10 trang mẫu của tài liệu "Đề cương chi tiết bài giảng Thực tập cơ sở dữ liệu", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

Tóm tắt nội dung tài liệu: Đề cương chi tiết bài giảng Thực tập cơ sở dữ liệu

Đề cương chi tiết bài giảng Thực tập cơ sở dữ liệu
ERROR('Khong co mgr',16,1) 
 RETURN 
END 
4. Chỉ có một người trong cơ quan là có chức vụ cao nhất (mgr=null) 
Khi thêm mới: 
CREATE TRIGGER TRIGGER4 ON [dbo].[Emp_Mg] 
FOR INSERT, UPDATE 
AS 
IF EXISTS (SELECT * FROM inserted WHERE Mg IS NULL) 
 AND ( (SELECT count(*) FROM Emp_Mg WHERE Emp_Mg.Mg_ID IS 
NULL) = 2 ) 
BEGIN 
 ROLLBACK TRANSACTION 
 RAISERROR('Exit Header',16,1) 
 RETURN 
END 
Bài 2: Thực hành theo đề tài nhóm. Sử dụng trigger kiểm tra toàn vẹn dữ liệu và thao 
tác với cơ sở dữ liệu trong đề tài nhóm. 
Tuần 11,12,13,14,15. Bài thực hành số 11 – Kết nối tới cơ sở dữ liệu và xây dựng 
ứng dụng thao tác đơn giản: thêm, sửa, xóa, tìm kiếm. 
Mục đích: Giúp sinh viên cài đặt ứng dụng trên ngôn ngữ lập trình C# kết nối tới dữ 
liệu trên SQL Server. 
Yêu cầu: Sinh viên kết nối được tới cơ sở dữ liệu, thao tác trên form thêm, sửa, xóa, 
tìm kiếm, thống kê báo cáo.. 
( Sinh viên đọc tài liệu tham khảo lập trình C#, phần kết nối với cơ sở dữ liệu. Giáo 
trình thực hành SQL từ trang 35-42, Slides bài giảng của Giáo viên: Chương 7 Lập 
trình T_SQL ) 
- Hình thức tổ chức dạy học: Thực hành 
 53
- Thời gian: 6-12t 
- Địa điểm: Phòng máy K12 
- Nội dung chính: 
I. Tóm tắt lý thuyết: 
PHẦN 1. KẾT NỐI CƠ SỞ DỮ LIỆU TRONG C# 
-Bước 1: xác định chuỗi kết nối và câu lệnh SQL cần thực hiện 
connStr = @”Data Source=WINDWALK-PC\SQLEXPRESS;Initial 
Catalog=datagridviewdemo;User ID=sa;password=123456”; 
// chuỗi kết nối đến CSDL 
connStr=@"Data Source=(local);Initial Catalog=THUCHANH;Integrated 
Security=True" 
String sql = “select * from Table”// câu lệnh select cần thực hiện 
-Bước 2: tạo đối tượng connection kết nối giữa ứng dụng và CSDL 
SqlConnection conn = new SqlConnection(); // khởi tạo một đối tượng kết nối 
Conn.ConnectionString = connStr; // lấy đường dẫn đến cơ sở dữ liệu 
Conn.Open(); // mở kết nối 
-Bước 3 : tạo đối tượng SqlAdapter là cầu nối giữa dataset và datasource để thực 
hiện công việc như đọc hay cập nhật dữ liệu 
SqlDataAdapter da = new SqlDataAdapter(sql,conn) ; 
Bước 4 :dữ liệu đọc ra từ câu lệnh select được lưu vào 1 datatable trong dataset 
DataTable dt = new DataTable() ; // khởi tạo đối tượng datatable 
da.Fill(dt) ; // fill dữ aliệu vào datatable 
 54
Bước 5: nếu dữ liệu được hiển thị ra datagridview. Ta cần 1 DataView kết nối đến 
DataTable. Đối tượng DataView dùng cho việc sắp xếp,lọc, tìm kiếm 
DataView dv = new DataView(dt); 
Bước 6: hiển thị dữ liệu lên datagridview 
Dgr.DataSource = dv; // gán datasource cho datagridview 
Dgr.AutoResizeColums(); // căn chỉnh lại chiều rộng các cột của datagridview 
Bước 7: Đóng kết nối 
conn.close(); 
PHẦN 2. SỬ DỤNG STORED PROCEDURE TRONG C# 
Thiết lập đối tượng SqlCommand để sử dụng một stored procedure, ngoài 
ra biết được cách dùng các parameter với stored procedure. 
Thay vì tạo các truy vấn động trong mã nguồn chương trình, ta có thể được lợi ích về 
việc tái sử dụng và hiệu suất khi sử dụng stored procedure. 
Thực thi một Stored Procedure 
Ngoài việc tạo các chuỗi lệnh SQL, ta phải thiết lập SqlCommand để thực thi stored 
procedure. Có hai bước để làm điều này: cho đối tượng SqlCommand biết stored 
procedure nào sẽ được thực thi và thiết lập chế độ thực thi stored procedure cho 
SqlCommand. Hai bước này được minh họa trong đoạn mã sau: 
 55
// 1. create a command object identifying the stored procedure 
SqlCommand cmd = new SqlCommand(" Stored Procedure Name", conn); 
 // 2. set the command object so it knows to execute a stored procedure 
cmd.CommandType = CommandType.StoredProcedure; 
Khi khai báo đối tượng SqlCommand trên, tham số đầu tiên được gán là “Stored 
Procedure Name”. Đây là tên của stored procedure trong database SQL Server. Tham 
số thứ hai là đối tượng connection, tương tự như constructor của SqlCommand dùng 
để thực thi một câu truy vấn. 
Dòng lệnh thứ hai chỉ cho đối tượng SqlCommand kiểu của lệnh sẽ được thực thi bằng 
cách gán propertyCommandType thành giá trị StoredProcedure của CommandType. 
Bằng cách thay đổi property CommandType này, SqlCommand sẽ hiểu được chuỗi 
lệnh trong tham số thứ nhất là một stored procedure. Phần còn lại của đoạn mã có thể 
được viết tương tự như các bài trước. 
Truyền Parameter cho Stored Procedure 
Dùng parameter cho stored procedure tương tự như dùng cho chuỗi lệnh truy vấn. 
Đoạn code sau cho thấy cách làm điều này: 
1 
2 
3 
4 
5 
6 
// 1. create a command object identifying the stored procedure 
SqlCommand cmd = new SqlCommand("CustOrderHist", conn); 
 // 2. set the command object so it knows to execute a stored procedure 
cmd.CommandType = CommandType.StoredProcedure; 
 // 3. add parameter to command, which will be passed to the stored procedure 
cmd.Parameters.Add(new SqlParameter("@CustomerID", custId)); 
 Constructor của SqlCommand trên xác định tên của stored procedure, CustOrderHist, 
trong tham số đầu tiên. Stored procedure này nhận một tham số, tên là @CustomerID. 
Do đó, ta phải tạo một parameter bằng cách dùng đối tượng SqlParameter. Tên của 
parameter được truyền trong tham số đầu tiên của SqlParameter constructor phải giống 
với tên của tham số của stored procedure. Sau đó thực thi command giống như với các 
đối tượng SqlCommand khác. 
 56
Một ví dụ hoàn chỉnh 
Mã lênh trong Listing chứa một ví dụ hoàn chỉnh minh họa cách dùng stored 
procedure. Có các phương thức được tách riêng cho một stored procedure không tham 
số và cho stored procedure có tham số. 
Listing 1: Executing Stored Procedures 
using System; 
using System.Data; 
using System.Data.SqlClient; 
 class StoredProcDemo 
{ 
 static void Main() 
 { 
 StoredProcDemo spd = new StoredProcDemo(); 
 // run a simple stored procedure 
 spd.RunStoredProc(); 
 // run a stored procedure that takes a parameter 
 spd.RunStoredProcParams(); 
 } 
 // run a simple stored procedure 
 public void RunStoredProc() 
 { 
 SqlConnection conn = null; 
 SqlDataReader rdr = null; 
 Console.WriteLine("\nTop 10 Most Expensive Products:\n"); 
 try 
 57
 { 
 // create and open a connection object 
conn = new SqlConnection("Server=(local);DataBase=Northwind;Integrated 
Security=SSPI"); 
 conn.Open(); 
 // 1. create a command object identifying the stored procedure 
SqlCommand cmd = new SqlCommand("Ten Most Expensive Products", 
conn); 
 // 2. set the command object so it knows to execute a stored procedure 
 cmd.CommandType = CommandType.StoredProcedure; 
 // execute the command 
 rdr = cmd.ExecuteReader(); 
 // iterate through results, printing each to console 
 while (rdr.Read()) 
 { 
 Console.WriteLine( 
 "Product: {0,-25} Price: ${1,6:####.00}", 
 rdr["TenMostExpensiveProducts"], 
 rdr["UnitPrice"]); 
 } 
 } 
 finally 
 { 
 if (conn != null) 
 { 
 conn.Close(); 
 58
 } 
 if (rdr != null) 
 { 
 rdr.Close(); 
 } 
 } 
 } 
 // run a stored procedure that takes a parameter 
 public void RunStoredProcParams() 
 { 
 SqlConnection conn = null; 
 SqlDataReader rdr = null; 
 // typically obtained from user 
 // input, but we take a short cut 
 string custId = "FURIB"; 
 Console.WriteLine("\nCustomer Order History:\n"); 
 try 
 { 
 // create and open a connection object 
 conn = new SqlConnection("Server=(local);DataBase=Northwind;Integrated 
Security=SSPI"); 
 conn.Open(); 
 // 1. create a command object identifying the stored procedure 
 SqlCommand cmd = new SqlCommand( 
 "CustOrderHist", conn); 
 59
 // 2. set the command object so it knows to execute a stored procedure 
 cmd.CommandType = CommandType.StoredProcedure; 
 // 3. add parameter to command, which will be passed to the stored procedure 
 cmd.Parameters.Add( new SqlParameter("@CustomerID", custId)); 
 // execute the command 
 rdr = cmd.ExecuteReader(); 
 // iterate through results, printing each to console 
 while (rdr.Read()) 
 { 
 Console.WriteLine( 
 "Product: {0,-35} Total: {1,2}", 
 rdr["ProductName"], 
 rdr["Total"]); 
 } 
 } 
 finally 
 { 
 if (conn != null) 
 { 
 conn.Close(); 
 } 
 if (rdr != null) 
 { 
 rdr.Close(); 
 } 
 60
 } 
 } 
} 
Phương thức RunStoredProc() trong Listing 1 đơn giản là chạy một stored procedure 
và in kết quả ra console. Trong phương thức RunStoredProcParams(), stored 
procedure nhận một tham số. Điều này cho thấy không có sự khác biệt giữa việc dùng 
tham số với chuỗi truy vấn và stored procedure 
Tổng kết 
Để thực thi stored procedure, ta cần chỉ ra tên của stored procedure trong tham số đầu 
tiên của một SqlCommand constructor và sau đó gán property CommandType của 
SqlCommand thành StoredProcedured. Ta cũng có thể truyền các tham số cho một 
stored procedure bằng cách dùng đối tượng SqlParameter, tương tự như cách làm với 
đối tượng SqlCommand dùng để thực thi một câu truy vấn. 
II. Bài thực hành 
Bài 1: Sinh viên làm theo ví dụ minh họa: 
Để giảm thiểu việc viết lệnh T-SQL trong mã code C#, người ta có thể tạo ra các thủ 
tục trong Hệ quản trị CSDL. Với cách này ta có thể dễ dàng bảo trì các mã T-SQL và 
Code C# trở lên ngắn gọn hơn. Đặc biệt là khi ta phải thực thi 1 thủ tục có thể lên đến 
hàng trang giấy hay vài trang giấy thì thực thi một thủ tục sẽ là giải pháp hữu hiệu 
trong lập trình với ADO.NET. 
Giả sử, ta sử dụng CSDL SQL Server có tên HRM, có 1 bảng đơn giản 
là: Departments. 
Bước 1: Thiết kế CSDL với bảng Departments như dưới đây 
Create table Departments(DepartmentID int primary key,DepartmentName 
nvarchar(250),Description nvarchar(250) 
Lưu ý: Trường DepartmentID ở đây thiết lập là khóa chính, tự động tăng 
Bước 2: Viết các thủ tục cho phép thêm, sửa, xóa một phòng ban 
/* Thủ tục thêm mới phòng ban*/ 
 61
CREATE PROC [dbo].[SP_InsertDepartment] 
( 
 @Name nvarchar(250), 
 @Description nvarchar(250) 
) 
AS 
INSERT INTO Departments 
VALUES(@Name,@Description); 
/* Thủ xóa một phòng ban*/ 
CREATE PROC [dbo].[SP_DeleteDepartment] 
( 
 @ID int 
) 
AS 
DELETE Departments 
WHERE DepartmentID= @ID; 
 /* Thủ tục sửa thông tin 1 phòng ban*/ 
CREATE PROC [dbo].[SP_UpdateDepartment] 
( 
 @ID int, 
 @Name nvarchar(250), 
 @Description nvarchar(250) 
) 
AS 
UPDATE Departments 
SET DepartmentName = @Name, 
 Description = @Description 
WHERE DepartmentID= @ID; 
 Bước 3: Bây giờ ta cần thiết kế giao diện như sau: 
 62
Trong ví dụ này ta ràng buộc dữ liệu DataGridView với 3 trường: 
DepartmentID, DepartmentName, Description. Tuy nhiên cột Mã phòng ban sẽ ẩn 
đi bằng cách cho thuộc tính Visible của cột đó = False. Tại sao lại ẩn đi? Nhằm trong 
suốt với người dùng, đây là trường tự động tăng nên người dùng không cần nhập, 
không cần quan tâm, nhưng lại là trường mà người lập trình cần thiết kế để thuận tiện 
trong thao tác cập nhật. 
Sau đó bổ sung vào giao diện 2 ô TextBox (txtName và txtDescripton), 3 Button: 
btnAdd, btnUpdate, btnDelete. 
Ta được giao diện như hình sau: 
Bước 4: Lập trình hiển thị dữ liệu lên DataGridView 
Đầu tiên ta khai báo và khởi tạo đối tượng Connection. Sau đó ta viết một 
hàm LoadData() dùng để load dữ liệu lên DataGridView vì hàm này còn được sử 
dụng lại khi ta thêm, sửa, xóa 1 bản ghi. 
Viết code như sau: 
 63
string strConn = @"Server=.\SQLEXPRESS; Database=HRM; Integrated Security=True"; 
 SqlConnection conn; 
 private void LoadData() 
 { 
 SqlDataAdapter da = new SqlDataAdapter("SELECT * FROM Departments", conn); 
 DataTable dt = new DataTable(); 
 da.Fill(dt); 
 dgvDeparts.DataSource = dt; 
 } 
 private void frmDepartment_Load(object sender, EventArgs e) 
 { 
 conn = new SqlConnection(strConn); 
 conn.Open(); 
 LoadData(); 
 } 
Khi viết xong đoạn lệnh trên, chạy chương trình thì kết quả có thể đã hiển thị nhưng 
cột STT vẫn trống vì không có ràng buộc với trường này. Bởi vậy ta hãy viết trong sự 
kiện RowPrePaint của điều khiển DataGridView như sau: 
private void dgvDeparts_RowPrePaint(object sender, DataGridViewRowPrePaintEventArgs e) 
 { 
 dgvDeparts.Rows[e.RowIndex].Cells["clNo"].Value = e.RowIndex + 1; 
 } 
Lúc này cột số thứ tự sẽ điền số tự động như mong muốn. 
 64
Hãy chuyển sang bước 5. 
Bước 5: Hiển thị dữ liệu lên TextBox tương ứng khi chọn 1 dòng trong DataGridView 
private void dgvDeparts_CellClick(object sender, DataGridViewCellEventArgs e) 
 { 
 if (e.RowIndex >= 0 && e.ColumnIndex >= 0) 
 { 
 txtName.Text = Convert.ToString(dgvDeparts.CurrentRow.Cells["clName"].Value); 
 txtDescription.Text = Convert.ToString(dgvDeparts.CurrentRow.Cells["clDescription"].Value); 
 } 
 } 
Bước 6: Thực thi thủ tục thêm mới một phòng ban: SP_InsertDepartment. 
private void btnAdd_Click(object sender, EventArgs e) 
 { 
 // Khai báo và khởi tạo đối tượng Command, truyền vào tên thủ tục tương ứng 
 SqlCommand cmd = new SqlCommand("SP_InsertDepartment",conn); 
 65
 // Khai báo kiểu thực thi là Thực thi thủ tục 
 cmd.CommandType = CommandType.StoredProcedure; 
 // Khai báo và gán giá trị cho các tham số đầu vào của thủ tục 
 // Khai báo tham số thứ nhất @Name - là tên tham số được tạo trong thủ tục 
 SqlParameter p = new SqlParameter("@Name", txtName.Text); 
 cmd.Parameters.Add(p); 
 // Khởi tạo tham số thứ 2 trong thủ tục là @Description 
 p = new SqlParameter("@Description",txtDescription.Text); 
 cmd.Parameters.Add(p); 
 // Thực thi thủ tục 
 int count = cmd.ExecuteNonQuery(); 
 if (count > 0) 
 { 
 MessageBox.Show("Thêm mới thành công"); 
 LoadData(); 
 } 
 else MessageBox.Show("Không thể thêm mới"); 
 } 
Có thể chạy chương trình và thử nghệm! 
Bước 7: Tương tự cho việc thực thi các thủ tục sửa và xóa như sau: 
private void btnUpdate_Click(object sender, EventArgs e) 
 { 
 SqlCommand cmd = new SqlCommand("SP_UpdateDepartment", conn); 
 cmd.CommandType = CommandType.StoredProcedure; 
 int id = (int)dgvDeparts.CurrentRow.Cells["clID"].Value; 
 SqlParameter p = new SqlParameter("@ID", id); 
 cmd.Parameters.Add(p); 
 66
 p = new SqlParameter("@Name", txtName.Text); 
 cmd.Parameters.Add(p); 
 p = new SqlParameter("@Description", txtDescription.Text); 
 cmd.Parameters.Add(p); 
 int count = cmd.ExecuteNonQuery(); 
 if (count > 0) 
 { 
 MessageBox.Show("Sửa thành công!"); 
 LoadData(); 
 } 
 else MessageBox.Show("Không sửa được!"); 
 } 
 private void btnDelete_Click(object sender, EventArgs e) 
 { 
 if (MessageBox.Show("Bạn có chắc chắn muôn xóa bản ghi đang chọn không?", "Thông báo", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == 
DialogResult.Yes) 
 { 
 SqlCommand cmd = new SqlCommand("SP_DeleteDepartment", conn); 
 cmd.CommandType = CommandType.StoredProcedure; 
 int id = (int)dgvDeparts.CurrentRow.Cells["clID"].Value; 
 SqlParameter p = new SqlParameter("@ID", id); 
 cmd.Parameters.Add(p); 
 int count = cmd.ExecuteNonQuery(); 
 if (count > 0) 
 { 
 MessageBox.Show("Xóa thành công!"); 
 67
 LoadData(); 
 } 
 else MessageBox.Show("Không thể xóa bản ghi hiện thời!"); 
 } 
 } 
Bài 2: Sinh viên làm bài tập xây dựng ứng dụng trên bài tập nhóm 

File đính kèm:

  • pdfde_cuong_chi_tiet_bai_giang_thuc_tap_co_so_du_lieu.pdf