Phần 4: Lập Trình Cơ Sở Dữ Liệu Với C# | Tìm ở đây

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:

tblMatHangMaSP 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
Cách thực thi đối tượng DataAdapter

Cách thực thi đối tượng DataAdapter

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ện

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

Bướ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ên

Cú 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#