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:

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 viết hoa ký tự đầu tiên trong C#

Cách viết hoa ký tự đầu tiên trong C#

Mình sẽ thực hiện các chương trình để viết hoa ký từ đầu với các…

Cách xóa khoảng trắng một chuỗi trong C#

Cách xóa khoảng trắng một chuỗi trong C#

Mình sẽ thực hiện ba chương trình để xóa khoảng trắng bằng ba ...

Tìm phần nguyên và phần dư của phép chia trong C#

Tìm phần nguyên và phần dư của phép chia trong C#

Mình sẽ thực hiện các chương trình để tìm phần nguyên và phần dư bằng…

Cách kiểm tra năm nhuận trong C#

Cách kiểm tra năm nhuận trong C#

Hiểu đơn giản thì năm nhuận sẽ hơn năm không nhuận một ...

Chương trình kiểm tra số chẵn hay số lẻ trong C#

Chương trình kiểm tra số chẵn hay số lẻ trong C#

Mình sẽ thực hiện 3 chương trình với 3 cách khác nhau để kiểm tra…

Cách cộng hai số trong C# được nhập từ bàn phím

Cách cộng hai số trong C# được nhập từ bàn phím

Trong bài viết này mình sẽ hướng dẫn các bạn thực hiện chương trình cộng…

Viết ứng dụng quản lý học sinh C# Winfroms và Firebase

Viết ứng dụng quản lý học sinh C# Winfroms và Firebase

Cụ thể mình sẽ thực hiện viết một ứng dụng quản lý học sinh đơn…

Cách xóa dữ liệu trên Firebase với C# Winforms

Cách xóa dữ liệu trên Firebase với C# Winforms

Để có thể ôn lại các kiến thức ở các bài trước, mình vẫn sẽ…

Cách Update dữ liệu từ C# Winforms lên Firebase

Cách Update dữ liệu từ C# Winforms lên Firebase

Để có thể thao tác được với dữ liệu trong Realtime Database,

Cách Insert dữ liệu từ C# Winforms lên Firebase

Cách Insert dữ liệu từ C# Winforms lên Firebase

Cách lấy dữ liệu từ Firebase về C# Winforms

Cách lấy dữ liệu từ Firebase về C# Winforms

Trong bài viết này chúng ta sẽ cùng nhau tìm hiểu cách lấy dữ liệu…

Cách kết nối C# Winforms với Firebase

Cách kết nối C# Winforms với Firebase

Sự kiện CellClick DataGridView trong C# Winforms

Sự kiện CellClick DataGridView trong C# Winforms

Sự kiện CellContentClick DataGridView trong C# Winforms

Sự kiện CellContentClick DataGridView trong C# Winforms

Mình sẽ hướng dẫn các bạn cách tạo và xử lý sự kiện CellContentClick

Sự kiện ValueChanged DateTimePicker trong C# Winforms

Sự kiện ValueChanged DateTimePicker trong C# Winforms

Mình sẽ hướng dẫn các bạn cách tạo và xử lý sự kiện ValueChanged

Sự kiện SelectedIndexChanged ListView trong C# Winforms

Sự kiện SelectedIndexChanged ListView trong C# Winforms

Mình sẽ giới thiệu các bạn cách tạo và xử lý sự kiện SelectedIndexChanged

Sự kiện SelectedIndexChanged ListBox trong C# Winforms

Sự kiện SelectedIndexChanged ListBox trong C# Winforms

Mình sẽ hướng dẫn cách tạo và xử lý sự kiện SelectedIndexChanged ...

Sự kiện SelectedIndexChanged ComboBox trong C# Winforms

Sự kiện SelectedIndexChanged ComboBox trong C# Winforms

Mình sẽ hướng dẫn các bạn cách tạo và xử lý sự ..

Sự kiện CheckedChanged RadioButton trong C# Winforms

Sự kiện CheckedChanged RadioButton trong C# Winforms

Trong bài viết này chúng

Sự kiện CheckedChanged CheckBox trong C# Winforms

Sự kiện CheckedChanged CheckBox trong C# Winforms

Trong bài viết này chúng ta sẽ cùng nhau tìm hiểu về sự kiện CheckedChanged…

Top