ADO.NET
CÁC CHỦ ĐỀ
BÀI MỚI NHẤT
Dự án mới của mình là gamehow.net, mời anh em ghé thăm và góp ý ạ.

Cách dùng Stored Procedure trong C# [ADO.NET]

Trong bài viết này chúng ta sẽ tìm hiểu về cách sử dụng Stored Procedure (còn được gọi là Proc) để thao tác với SQL Server trong C# ADO.NET. Đây là cách thường dùng trong các ứng dụng thực tế, vì nó an toàn và có độ bảo mật cao.

Mình sẽ giới thiệu sơ lược về Proc là gì? cách gọi Proc trong C# ADO.NET và một số ví dụ cụ thể sử dụng nó.

banquyen png
Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.

1. Stored Procedure trong SQL là gì?

Stored Procedure trong SQL là một đối tượng cơ sở dữ liệu có chứa các câu lệnh SQL được biên dịch trước. Nói một cách dễ hiểu, Proc là một khối lệnh được thiết kế trước để thực hiện một tác vụ nào đó khi được gọi. Để hiểu rõ hơn, các bạn có thể xem bài viết chi tiết hơn về Stored Procedure trong SQL Server.

Ví dụ: Khi chúng ta muốn lấy một bảng dữ liệu trong SQL Server, nếu viết theo cách thông thường sẽ như sau:

select * from Student

Giả sử chúng ta có một Proc "Select_Student" được viết với chức năng tương tự như trên.

create proc Select_Student
as
select * from Student

Thì khi cần sử dụng nó ta chỉ cần gọi tên, không cần phải viết một lệnh dài như vậy nữa.

Select_Student

Ở trên đây là một ví dụ đơn giản, nên các dòng lệnh không nhiều. Nếu có một tác vụ hàng chục dòng lệnh thì việc tạo Proc là rất tiện.

2. Cách gọi một Stored Procedure bằng C# ADO.NET

Trong phần này mình sẽ giới thiệu hai cách để gọi một Proc bằng C#, đây là hai cách thường được sử dụng.

Cách 1:

SqlCommand cmd = new SqlCommand();
cmd.Connection = connection;
cmd.CommandText = "Select_Student";
cmd.CommandType = CommandType.StoredProcedure;

Đầu tiên ta cần tạo một instance thuộc class SqlCommand có tên là cmd, sau đó gán chuỗi kết nối vào cho thuộc tính Connection.

Chỉ định giá trị thuộc tính CommandText là tên của Stored Procedure và quan trọng nhất là chỉ định CommandType là loại lệnh StoredProcedure.

Cách 2:

SqlCommand cmd = new SqlCommand("Select_Student", connection)
{
     CommandType = CommandType.StoredProcedure
};

Trong cách này, về các thành phần thì không có gì khác so với cách 1. Ở đây, sử dụng phương thức khởi tạo được nạp chồng. Nghĩa là tên Proc và chuỗi kết nối được truyền thẳng vào đối tượng SqlCommand mà không thông qua thuộc tính Connection và CommandText.

Gọi một Stored Procedure với tham số đầu vào trong C#

Giả sử mình có một Proc trong SQL Server như sau.

Create Proc spGetStudent
@Id int
as
begin
     select * from Student where Id = @Id
end
go

Trong Proc này ta thấy có một tham số truyền vào là @Id có kiểu dữ liệu là int. Và Proc này được sử dụng để lấy thông tin của học sinh có Id bằng với @Id truyền vào.

Với một Proc như vậy, thì khi gọi ở C# ta sẽ thực hiện gọi như sau.

//tạo đối tượng command
SqlCommand cmd = new SqlCommand()
{
      CommandText = "spGetStudent",
      Connection = connection,
      CommandType = CommandType.StoredProcedure
};
//khai báo các thuộc tính của tham số
SqlParameter param = new SqlParameter
{
      ParameterName = "@Id",
      SqlDbType = SqlDbType.Int,
      Value = 101,
      Direction = ParameterDirection.Input
};
//thêm tham số vào đối tượng SqlCommand
cmd.Parameters.Add(param);

3. Ví dụ sử dụng Store Procedure trong C# ADO.NET

Trong ví dụ này mình sẽ thực hiện thêm, sửa, xóa dữ liệu trong SQL Server sử dụng Proc. Đây là những thao tác rất cơ bản những được sử dụng rất nhiều trong các ứng dụng.

Thêm dữ liệu vào SQL Server sử dụng Stored Procedure

Đầu tiên các bạn cần viết Proc để thêm dữ liệu vào SQL, cụ thể ở đây chúng ta sẽ viết thủ tục spInsertStudent để thêm học sinh vào bảng StudentDb.

create proc spInsertStudent
@Id int,
@Name nvarchar(50),
@Email nvarchar(50),
@Mobile int
as
begin
	insert Student(Id,Name,Email,Mobile) values(@Id,@Name,@Email,@Mobile)
end
go

Sau khi đã tạo xong Proc, bây giờ chúng ta sẽ gọi nó trong C# để chạy Proc và thêm dữ liệu vào

using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp
{
    class Program
    {
        static void Main(string[] args)
        {
            //gọi hàm insert để thêm học sinh
            new Program().insert();
            Console.ReadKey();
        }
        public void insert()
        {
            //sử dụng lớp SqlConnection để tạo chuỗi kết nối
            SqlConnection con = new SqlConnection();
            //gọi chuỗi kết nối ở file App.config bằng thuộc tính ConnectionString
            con.ConnectionString = ConfigurationManager.ConnectionStrings["conn"].ConnectionString;
            try
            {
                //khỏi tạo instance của class SqlCommand
                SqlCommand cmd = new SqlCommand();
                //sử dụng thuộc tính CommandText để chỉ định tên Proc
                cmd.CommandText = "spInsertStudent";
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Connection = con;

                //khai báo các thông tin của tham số truyền vào
                cmd.Parameters.Add("@Id", SqlDbType.Int).Value = 105;
                cmd.Parameters.Add("@Name", SqlDbType.NVarChar).Value = "Tin";
                cmd.Parameters.Add("@Email", SqlDbType.NVarChar).Value = "tin@gmail.com";
                cmd.Parameters.Add("@Mobile", SqlDbType.NVarChar).Value = "1234123148";
                //mở chuỗi kết nối
                con.Open();
                //sử dụng ExecuteNonQuery để thực thi
                cmd.ExecuteNonQuery();
                //đóng chuỗi kết nối.
                con.Close();

                Console.WriteLine("Them hoc sinh thanh cong !!!");
            }
            catch (Exception e)
            {
                Console.WriteLine("Co loi xay ra !!!" + e);
            }
            // dóng chuỗi kết nối
            finally
            {
                con.Close();
            }
        }
    }
}

Kết quả:

bai11 02 png

Sửa dữ liệu trong SQL Server sử dụng Stored Procedure

Tượng tự như thêm mới dữ liệu, ta cũng sẽ viết Proc để sửa dữ liệu. Sau đó gọi nó trong C# để thực hiện sửa thông tin, cụ thể là sửa thông tin học sinh trong bảng Student của database StudentDb.

createproc spUpdateStudent
@Id int,
@Name nvarchar(50),
@Email nvarchar(50),
@Mobile nvarchar(20)
as
begin
	update Student
	set
		Name = @Name,
		Email = @Email,
		Mobile = @Mobile
	where Id = @Id
end
go

Sau khi tạo Proc xong thì ta tiến hành gọi nó trong C# với cấu trúc tương tự như thêm mới dữ liệu.

using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp
{
    class Program
    {
        static void Main(string[] args)
        {
            //gọi hàm update để sửa học sinh
            new Program().update();
            Console.ReadKey();
        }
        public void update()
        {
            //sử dụng lớp SqlConnection để tạo chuỗi kết nối
            SqlConnection con = new SqlConnection();
            //gọi chuỗi kết nối ở file App.config bằng thuộc tính ConnectionString
            con.ConnectionString = ConfigurationManager.ConnectionStrings["conn"].ConnectionString;
            try
            {
                //khỏi tạo instance của class SqlCommand
                SqlCommand cmd = new SqlCommand();
                //sử dụng thuộc tính CommandText để chỉ định tên Proc
                cmd.CommandText = "spUpdateStudent";
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Connection = con;

                //khai báo các thông tin của tham số truyền vào
                cmd.Parameters.Add("@Id", SqlDbType.Int).Value = 105;
                cmd.Parameters.Add("@Name", SqlDbType.NVarChar).Value = "Linh";
                cmd.Parameters.Add("@Email", SqlDbType.NVarChar).Value = "linh@gmail.com";
                cmd.Parameters.Add("@Mobile", SqlDbType.NVarChar).Value = "9999999999";
                //mở chuỗi kết nối
                con.Open();
                //sử dụng ExecuteNonQuery để thực thi
                cmd.ExecuteNonQuery();
                //đóng chuỗi kết nối.
                con.Close();

                Console.WriteLine("Sua hoc sinh thanh cong !!!");
            }
            catch (Exception e)
            {
                Console.WriteLine("Co loi xay ra !!!" + e);
            }
            // dóng chuỗi kết nối
            finally
            {
                con.Close();
            }
        }
    }
}

Kết quả:

bai11 013 png

Xóa dữ liệu khỏi SQL Server sử dụng Stored Procedure

Proc xóa dữ liệu khỏi SQL Server, cụ thể là bảng Student của database StudentDb.

create proc spDeleteStudent
@Id int
as
begin
	delete Student where Id = @Id
end
go

Gọi Proc spDeleteStudent trong C# và thực hiện xóa học sinh khỏi bảng Student.

using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp
{
    class Program
    {
        static void Main(string[] args)
        {
            //gọi hàm delete để xoa học sinh
            new Program().delete();
            Console.ReadKey();
        }
        public void delete()
        {
            //sử dụng lớp SqlConnection để tạo chuỗi kết nối
            SqlConnection con = new SqlConnection();
            //gọi chuỗi kết nối ở file App.config bằng thuộc tính ConnectionString
            con.ConnectionString = ConfigurationManager.ConnectionStrings["conn"].ConnectionString;
            try
            {
                //khỏi tạo instance của class SqlCommand
                SqlCommand cmd = new SqlCommand();
                //sử dụng thuộc tính CommandText để chỉ định tên Proc
                cmd.CommandText = "spDeleteStudent";
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Connection = con;

                //khai báo các thông tin của tham số truyền vào
                cmd.Parameters.Add("@Id", SqlDbType.Int).Value = 105;
                //mở chuỗi kết nối
                con.Open();
                //sử dụng ExecuteNonQuery để thực thi
                cmd.ExecuteNonQuery();
                //đóng chuỗi kết nối.
                con.Close();

                Console.WriteLine("Xoa hoc sinh thanh cong !!!");
            }
            catch (Exception e)
            {
                Console.WriteLine("Co loi xay ra !!!" + e);
            }
            // dóng chuỗi kết nối
            finally
            {
                con.Close();
            }
        }
    }
}

Kết quả:

bai11 04 png

Như vậy là chúng ta đã tìm hiểu về cách sử dụng Stored Procedure để thao tác với SQL Server trong C# ADO.NET. Các bạn hãy luyện tập thật nhiều để thành thạo nó nhé, chúc các bạn thành công !!!

Cùng chuyên mục:

Cách dùng Stack (ngắn xếp) trong C#

Cách dùng Stack (ngắn xếp) trong C#

Mình sẽ giới thiệu về các đặc điểm, thuộc tính và phương thức của Stack…

Cách dùng Queue (hàng đợi) trong C#

Cách dùng Queue (hàng đợi) trong C#

Mình sẽ giới thiệu về các đặc điểm, thuộc tính, phương thức của Queue, cũng…

Cách dùng Hashtable (bảng băm) trong C#

Cách dùng Hashtable (bảng băm) trong C#

Cụ thể sẽ tìm hiểu Hashtable là gì? các đặc điểm của nó, cùng với…

Sự kiện Enter và Leave trong C# Winforms

Sự kiện Enter và Leave trong C# Winforms

Trong bài viết này mình sẽ hướng dẫn các bạn cách ...

Sự kiện KeyPress, KeyDown, KeyUp trong C# Winforms

Sự kiện KeyPress, KeyDown, KeyUp trong C# Winforms

Một câu hỏi được đặt ra là làm cách nào để có thể phát hiện…

Sắp xếp trộn trong C# (Merge Sort)

Sắp xếp trộn trong C# (Merge Sort)

Trong bài viết này mình sẽ hướng dẫn các bạn cách sắp xếp các ..

Sắp xếp nổi bọt trong C# (Bubble Sort)

Sắp xếp nổi bọt trong C# (Bubble Sort)

Trong bài viết này mình sẽ hướng dẫn các bạn cách sắp ...

Cách in ra hình tam giác ký tự * trong C#

Cách in ra hình tam giác ký tự * trong C#

Trong bài viết này mình sẽ hướng dẫn các bạn cách ...

Cách tính tổng các số chẵn từ 1 đến N trong C#

Cách tính tổng các số chẵn từ 1 đến N trong C#

Trước khi đi vào viết chương trình, chúng ta cùng tìm hiểu qua số chẵn…

Cách tính tổng các số lẻ từ 1 đến N trong C#

Cách tính tổng các số lẻ từ 1 đến N trong C#

Trong bài viết này mình sẽ hướng dẫn các bạn cách tính tổng các lẻ…

Cách đếm số chữ số của một số nguyên trong C#

Cách đếm số chữ số của một số nguyên trong C#

Chúng ta cùng xem qua một số ví dụ để hiểu rõ hơn về chương…

Cách tính chu vi và diện tích hình tam giác trong C#

Cách tính chu vi và diện tích hình tam giác trong C#

Tam giác là một loại hình cơ bản trong hình học, có ba đỉnh là…

Cách tính chu vi và diện tích hình tròn trong C#

Cách tính chu vi và diện tích hình tròn trong C#

Trước khi đi vào viết chương trình tính chu vi và diện ..

Cách tính chu vi và diện tích hình chữ nhật trong C#

Cách tính chu vi và diện tích hình chữ nhật trong C#

Trong bài viết này mình sẽ hướng dẫn các bạn ...

Cách xóa phần tử trùng lặp khỏi mảng trong C#

Cách xóa phần tử trùng lặp khỏi mảng trong C#

Trong bài viết này mình sẽ hướng dẫn các bạn cách loại bỏ các ..

Cách tìm tất cả các chuỗi con của chuỗi đã cho trong C#

Cách tìm tất cả các chuỗi con của chuỗi đã cho trong C#

Trong bài viết này mình sẽ hướng dẫn các bạn cách tìm ...

Cách xóa các ký tự trùng lặp khỏi chuỗi trong C#

Cách xóa các ký tự trùng lặp khỏi chuỗi trong C#

Trong bài viết này mình sẽ hướng dẫn các bạn cách xóa các ký tự…

Đếm số lần xuất hiện của ký tự trong chuỗi trong C#

Đếm số lần xuất hiện của ký tự trong chuỗi trong C#

Trong bài viết này minh sẽ hướng dẫn các bạn cách đếm ...

Cách chuyển đổi nhị phân sang thập phân trong C#

Cách chuyển đổi nhị phân sang thập phân trong C#

Trong bài viết này mình sẽ hướng dẫn các bạn cách chuyển đổi số ...

Cách chuyển đổi thập phân sang nhị phân trong C#

Cách chuyển đổi thập phân sang nhị phân trong C#

Số nhị phân là các con số có cơ số là 2. Các số nhị…

Top