Phần 4: Lập Trình Cơ Sở Dữ Liệu Với C# | Tìm ở đây
Có thể bạn quan tâm
Lập trình Cơ sở dữ liệu là một phần rất quan trọng trong lập trình ứng dụng, nó là trung gian kết nối giữa người sử dụng với cơ sở dữ liệu. Với công nghệ ADO.NET chúng ta có một chuẩn thống nhất để lập trình thao tác với các nguồn cơ sở dữ liệu khác nhau như Access, MySQL, SQL Server, Oracle… cũng như lập trình ứng dụng với dạng WinForm và WebForm. Trong bài này chúng ta sẽ đi vào một bài tập cụ thể để tìm hiểu các đối tượng quan trọng trong ADO.NET để lập trình với CSDL như: Connection, Command, DataReader, DataAdapter, DataSet để kết nối đến hệ quản trị CSDL SQL Server.
Nội dung
- Yêu cầu bài toán
- Tổng quan Các đối tượng trong ADO.NET
- Thực hiện câu lệnh Select, hiển thị dữ liệu lên DataGrid
- Thực hiện các câu lệnh Insert, Update, Delete dữ liệu
- Sử dụng Stored Procedure
- Lưu thông tin cấu hình trong file config
- Tham khảo thêm
Yêu cầu bài toán
Lập trình quản lý cơ sở dữ liệu QLBanHang có các bảng:
tblMatHang( MaSP nchar(5), TenSP nvarchar(30), NgaySX Date, NgayHH Date, DonVi nvarchar(10), DonGia float , GhiChu nvarchar(200))
tblNhaCC(MaNhaCC nchar(5), TenNhaCC nvarchar(50), DiaChi nvarchar(200), MaSoThue nvarchar(15), TaiKhoan nvarchar(15), DienThoai nvarchar(11))
tblHangNhap(MaSP nchar(5), MaNhaCC nchar(5), SoLuong int, DonGia float, SoHD nvarchar(10), NgayGH Date)
Hãy xây dựng giao diện và các chức năng Thêm mới, Sửa, Xoá, Tìm kiếm của các bảng trên tương tự như sau. >Xem hướng dẫn tạo Database trong VisualStudio
Tổng quan Các đối tượng trong ADO.NET
1. Các .Net Data Provider trong ADO.Net
Sử dụng NameSpace System.Data để lập trình với ADO.NET Các .Net Data Provider được sử dụng để kết nối tới cơ sở dữ liệu, thực thi các câu lệnh truy vấn (SQL) và lấy dữ liệu. Dữ liệu trả về có thể được xử lý trực tiếp, đặt trong đối tượng DataSet, được kết hợp với dữ liệu từ nhiều nguồn hoặc gửi dữ liệu giữa các tầng (tiers) trong mô hình lập trình nhiều tầng (N-Tier). Trong .Net Framework có các .Net Data Provider mặc định sau:
- .NET Data Provider cho SQL Server: sử dụng namespace System.Data.SqlClient
- .NET Data Provider cho OLE DB: sử dụng namespace System.Data.OleDb
- .NET Data Provider cho ODBC: sử dụng namespace System.Data.Odbc
- .NET Data Provider cho Oracle: sử dụng namespace System.Data.OracleClient
- EntityClient Provider: cung cấp truy cập dữ liệu cho các ứng dụng dạng Entity Data Model (EDM), sử dụng namespace System.Data.EntityClient
- .NET Data Provider cho SQL Server Compact 4.0: cung cấp truy cập dữ liệu cho Microsoft SQL Server Compact 4.0, sử dụng namespace System.Data.SqlServerCe
2. Các đối tượng trong .Net Data Provider
- Connection: thiết lập kết nối tới nguồn dữ liệu
- Command: thực thi các câu lệnh truy vấn với nguồn dữ liệu từ một Connection
- DataReader: cung cấp một luồng (stream) dữ liệu chỉ đọc từ nguồn dữ liệu
- DataAdapter: đặt dữ liệu vào DataSet và cập nhật dữ liệu từ DataSet về nguồn dữ liệu
3. Các phương thức và thuộc tính quan trọng
a. Connection
- Thuộc tính ConnectionString: truyền vào chuỗi kết nối tới nguồn dữ liệu
- Phương thức Open: mở kết nối
- Phương thức Close: đóng kết nối
b. Command
- Thuộc tính CommandText: truyền vào câu lệnh SQL hoặc tên Stored procedure
- Thuộc tính CommandType: kiểu câu lệnh SQL là StoredProcedure, TableDirect hay Text
- Thuộc tính Connection: truyền vào đối tượng Connection
- Phương thức ExecuteReader: thực thi với câu lệnh SQL Select và trả về luồng dữ liệu qua đối tượng DataReader
- Phương thức ExecuteScalar: thực thi câu lệnh SQL Select và trả về một giá trị ở hàng đầu tiên và cột đầu tiên. Thích hợp với câu lệnh Select dạng thống kê như Count, Sum, AVG …
- Phương thức ExecuteNonQuery: thực thi câu lệnh SQL như Insert, Update, Delete … và không trả về kết quả
- Phương thức ExecuteXMLReader: thực thi câu lệnh truy vấn với các câu lệnh cho XML
c. DataReader
- Phương thức Read: đọc các hàng dữ liệu
d. DataAdapter
- Phương thức Fill: đổ dữ liệu từ nguồn dữ liệu vào DataSet
- Phương thức Update: cập nhật dữ liệu từ DataSet tới nguồn dữ liệu
Thực hiện câu lệnh Select, hiển thị dữ liệu lên DataGrid
>>Xem hướng dẫn phần thiết kế giao diện
Để lập trình với CSDL, bạn cần biết các câu lệnh cơ bản để thao tác với CSDL như SELECT, INSERT, UPDATE, DELETE. Phần này chúng ta sẽ lập trình để hiển thị dữ liệu lên DataGridView
Cú pháp câu lệnh Select
SELECT danh_sách_các_cột FROM tên_bảng WHERE danh_sách_các_điều_kiệnCác bước
Bước 1:Khai báo .Net Data Provider cho SQL Server
using System.Data.SqlClient;Bước 2: Tạo đối tượng Connection, khởi gán chuỗi kết nối, mở kết nối
//Tạo đối tượng Connection SqlConnection con = new SqlConnection(); //Truyền vào chuỗi kết nối tới cơ sở dữ liệu //Sử dụng Application.StartupPath để lấy đường dẫn tới thư mục chứa file chạy chương trình con.ConnectionString = @"Data Source=.\SQLEXPRESS;AttachDbFilename=" + Application.StartupPath + @"\QLBanHang.mdf;Integrated Security=True;User Instance=True"; con.Open(); // mở kết nốiBước 3: Khai báo đối tượng DataAdapter để Fill dữ liệu vào DataSet
//Lấy toàn bộ dữ liệu từ bảng tblMatHang String sql = "Select * from tblMatHang"; //tạo đối tượng DataSet DataSet ds = new DataSet(); //Khởi tạo đối tượng DataAdapter và cung cấp vào câu lệnh SQL và đối tượng Connection SqlDataAdapter dap = new SqlDataAdapter(sql,con); //Dùng phương thức Fill của DataAdapter để đổ dữ liệu từ DataSource tới DataSet dap.Fill(ds);Bước 4: Gắn dữ liệu lên DataGrid
//Gắn dữ liệu từ DataSet lên DataGridView dgvKetQua.DataSource = ds.Tables[0]; dgvKetQua.Refresh();>>Xem hướng dẫn phần hiển thị dữ liệu lên DataGridView
Thực hiện các câu lệnh Insert, Update, Delete dữ liệu
Cú pháp câu lệnh Insert
INSERT INTO tên_bảng(danh_sách_các_cột) VALUES (danh_sách_các_giá_trị)Các bước
Bước 1: Khởi tạo đối tượng Connection giống bước 2 phần trên Bước 2: Khởi tạo đối tượng Command và thực thi câu lệnh Insert
//Tạo câu lệnh truy vấn Insert lấy dữ liệu từ các Control trên Form thiết kế sql = "INSERT INTO tblMatHang(MaSP,TenSP,NgaySX,NgayHH,DonVi,DonGia,GhiChu)VALUES ("; sql += "N'" + txtMaSP.Text + "',N'" + txtTenSP.Text + "','" + dtpNgaySX.Value.Date + "','" + dtpNgayHH.Value.Date + "',N'" + txtDonVi.Text + "',N'" + txtDonGia.Text + "',N'" + txtGhiChu.Text + "')"; //Thực thi câu lệnh SQL sử dụng đối tượng Command SqlCommand cmd = new SqlCommand(sql, con); cmd.ExecuteNonQuery(); Muốn lưu được dữ liệu tiếng việt cần thêm ký tự N đặt trước dữ liệu, giống như câu lệnh truy vấn ở trênCú pháp câu lệnh Update
UPDATE tên_bảng SET tên_cột_1 = giá_trị_1, tên_cột_2 = giá_trị_2, ..., tên_cột_n = giá_trị_n [WHERE điều_kiện];Các bước
thực hiện tương tự như phần trên, chỉ khác câu lệnh SQL Update.
Cú pháp câu lệnh Delete
DELETE FROM tên_bảng [WHERE điều_kiện];Các bước
thực hiện tương tự như phần trên, chỉ khác câu lệnh SQL Delete.
Sử dụng các Stored Procedure
Thay vì viết câu lệnh SQL trực tiếp trong Code chương trình, chúng ta có thể khai thác các Stored Procedure để tái sử dụng và tăng hiệu năng sử dụng Stored Procedure. Xem thêm bài về Stored Procedure.
Các bước
Bước 1: Tạo Stored Procedure trong SQL Server, giả sử đặt tên là InsertMatHang
CREATE PROCEDURE InsertMatHang @MaSP nachr(5), @TenSP nvarchar(30), @NgaySX Date, @NgaySX Date, @DonVi nvarchar(10), @DonGia float, @GhiChu nvarchar(200) AS INSERT INTO tblMatHang(MaSP,TenSP,NgaySX,NgayHH,DonVi,DonGia,GhiChu) VALUES(@MaSP,@TenSP,@NgaySX,@NgayHH,@DonVi,@DonGia,@GhiChu)Bước 2: Viết code C# thực thi Stored Procedure
//B1. Tạo đối tượng Connection SqlConnection con = new SqlConnection(); con.ConnectionString = @"Data Source=.\SQLEXPRESS;AttachDbFilename=" + Application.StartupPath + @"\QLBanHang.mdf;Integrated Security=True;User Instance=True"; con.Open(); // mở kết nối //B2. Tạo đối tượng Command SqlCommand cmd = new SqlCommand(); //Thiết lập các thuộc tính cho đối tượng Command cmd.Connection = con; cmd.CommandType = CommandType.StoredProcedure; cmd.CommandText = "InsertMatHang"; //B3. Gắn các Parameter và giá trị cho đối tượng Command cmd.Parameters.Add(new SqlParameter("@MaSP", txtMaSP.Text)); cmd.Parameters.Add(new SqlParameter("@TenSP", txtTenSP.Text)); cmd.Parameters.Add(new SqlParameter("@NgaySX", dtpNgaySX.Value.Date)); cmd.Parameters.Add(new SqlParameter("@NgayHH", dtpNgayHH.Value.Date)); cmd.Parameters.Add(new SqlParameter("@DonVi", txtDonVi.Text)); cmd.Parameters.Add(new SqlParameter("@DonGia", txtDonGia.Text)); cmd.Parameters.Add(new SqlParameter("@GhiChu", txtGhiChu.Text)); //B4. Thực thi Stored Procedure cmd.ExecuteNonQuery();Lưu thông tin cấu hình trong file config
Như phần trên bạn thấy khi khởi tạo chuỗi kết nối cho đối tượng Connection chúng ta đang đặt code cứng (hard code), sẽ không mềm dẻo khi bạn đi triển khai ứng dụng cho khách hàng. Bạn có thể lưu trữ chuỗi kết nối trong file config của ứng dụng (file có tên app.config, một dạng file xml lưu trữ toàn bộ cấu hình ứng dụng). Khi đi triển khai ứng dung, chúng ta chỉ cần mở file app.config là có thể cấu hình cho ứng dụng mà không cần phải biên dịch lại code.
Các bước
Bước 1: vào Project > Chọn Project Properties > Settings > rồi đánh Name: QLMatHangConnectionString, Type: Connection string, Value: Chọn cấu hình tới CSDL của bạn Bước 2: cập nhật trong Code:
SqlConnection objCon = new SqlConnection(); //Lấy dữ liệu chuỗi kết nối thông qua đối tượng Properties objCon.ConnectionString = Properties.Settings.Default.QLMatHangConnectionString;Download Sourcode
Tham khảo thêm
- Bài giảng lập trình Cơ sở dữ liệu với ADO.NET
- Các bài học sử dụng SQL Server
- Các câu lệnh SQL căn bản
- Thiết kế giao diện và lập trình Cơ sở dữ liệu với WinForms
- Thiết kế giao diện và lập trình Cơ sở dữ liệu với WebForms
- Xây dựng chương trình quản lý bán hàng bằng C#
- Chuẩn viết code .Net
Từ khóa » Truyền Tham Số Sql Trong C#
-
(ADO.NET) SqlCommand Truy Vấn Và Cập Nhật Dữ Liệu C# SQL Server
-
Làm Việc Với Cơ Sở Dữ Liệu SQL Server Trong C# - Openplanning
-
Thực Thi Truy Vấn SQL Trong C#, SqlCommand, SqlParameter
-
Cách Dùng Stored Procedure Trong C# [ADO.NET] - Freetuts
-
C# – Truyền Tham Số - Henry Nguyễn
-
[ADO.NET Tutorial] Lesson 06: Thêm Parameter Vào SqlCommand
-
[C#] Hướng Dẫn Sử Dụng Từ Khóa Params để Truyền Nhiều Tham Số ...
-
Cách Truyền Các Tham Số Trong Store Procedure | Bùi Anh Khoa
-
THAM CHIẾU VÀ THAM TRỊ - Đào Hải Nam
-
C# Xin Hướng Dẫn Sử Dụng Procedure Nhận Tham Số Output
-
Cách Truyền Tham Số Có Kí Tự Unicode Vào Store Procedure Trong Sql
-
Truy Vấn được Tham Số Hóa So Với SQL Injection - HelpEx