ADO.NET
CÁC CHỦ ĐỀ
BÀI MỚI NHẤT
MỚI CẬP NHẬT

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.

test php

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.

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ó.

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:

Bài viết này được đăng tại [free tuts .net]

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:

Memento Design Pattern trong C# - Cách triển khai và ví dụ

Memento Design Pattern trong C# - Cách triển khai và ví dụ

Interpreter Design Pattern trong C# - Cách triển khai và ví dụ

Interpreter Design Pattern trong C# - Cách triển khai và ví dụ

Strategy Design Pattern trong C# - Cách triển khai và ví dụ

Strategy Design Pattern trong C# - Cách triển khai và ví dụ

Visitor Design Pattern trong C# - Cách triển khai và ví dụ

Visitor Design Pattern trong C# - Cách triển khai và ví dụ

Command Design Pattern trong C# - Cách triển khai và ví dụ

Command Design Pattern trong C# - Cách triển khai và ví dụ

Observer Design Pattern trong C# - Cách triển khai và ví dụ

Observer Design Pattern trong C# - Cách triển khai và ví dụ

Iterator Design Pattern trong C# - Cách triển khai và ví dụ

Iterator Design Pattern trong C# - Cách triển khai và ví dụ

Proxy Design Pattern trong C# - Cách triển khai và ví dụ

Proxy Design Pattern trong C# - Cách triển khai và ví dụ

Composite Design Pattern trong C# - Cách triển khai và ví dụ

Composite Design Pattern trong C# - Cách triển khai và ví dụ

Bridge Design Pattern trong C# - Cách triển khai và ví dụ

Bridge Design Pattern trong C# - Cách triển khai và ví dụ

Decorator Design Pattern trong C# - Cách triển khai và ví dụ

Decorator Design Pattern trong C# - Cách triển khai và ví dụ

Facade Design Pattern trong C# - Cách triển khai và ví dụ

Facade Design Pattern trong C# - Cách triển khai và ví dụ

Adapter Design Pattern trong C# - Cách triển khai và ví dụ

Adapter Design Pattern trong C# - Cách triển khai và ví dụ

Singleton Design Pattern trong C# - Cách triển khai và ví dụ

Singleton Design Pattern trong C# - Cách triển khai và ví dụ

Prototype Design Pattern trong C# - Cách triển khai và ví dụ

Prototype Design Pattern trong C# - Cách triển khai và ví dụ

Builder Design Pattern trong C# - Cách triển khai và ví dụ

Builder Design Pattern trong C# - Cách triển khai và ví dụ

Tự viết ứng dụng quản lý xe ra vào C# Winforms và Firebase

Tự viết ứng dụng quản lý xe ra vào C# Winforms và Firebase

Trong bài viết này Freetuts chia sẽ cho các bạn một ứng dụng khá thú…

Factory Design Pattern trong C# - Cách triển khai và ví dụ

Factory Design Pattern trong C# - Cách triển khai và ví dụ

Chúng ta sẽ tìm hiểu về Factory Design Pattern trong C# là gì? Cách triển…

Hướng dẫn giải phương trình bậc hai trong C#

Hướng dẫn giải phương trình bậc hai trong C#

Giải phương trình bậc nhất ax + b = 0 trong C#

Giải phương trình bậc nhất ax + b = 0 trong C#

Top