ASP.NET MVC 5 Stored Procedure

ASP.NET MVC 5 Stored Procedure

Tiếp tục bài viết chia sẻ với mọi người, trong bài viết này mình sử dụng Stored Procedure in ASP.NET MVC 5. Để lấy dữ liệu, cập nhật, thêm,...Thông thường ta có nhiều câu lệnh lấy dữ liệu ra, rồi thêm dữ liệu vào, cứ mỗi lần ta phải viết lại câu truy vấn, nay mình sẽ tạo Stored Procedure để sử dụng cho nhanh và gọn lẹ,...
Nếu bạn đã học SQL SERVER ít nhiều gì mọi người cũng biết được về Stored Procudure trong SQL SERVER, ta sẽ tạo Stored Procedure trước, xong rồi dùng ASP.NET MVC 5 gọi chúng ra để xử lý
Chuẩn bị

 - Create database in SQL SERVER 
 - Create Project ASP.NET MVC 5: File -> New project -> Chọn ASP.NET MVC 5
 - Install Entity Framework: Click right project -> Manager Nutget Packages -> Search Entity Framework -> Installing

Hình bên dưới đây là Database trong SQL SERVER 2008 của tôi, tôi có tạo các table và Stored Procedure sẵn

stored procedure in asp.net mvc 5

Mọi người có thể copy đoạn mã dưới đây để chạy thực thi trong SQL SERVER để tạo Stored Procedure

//GetAll_User
 CREATE PROC GetAll_User
 AS
	SELECT * FROM User Order By idUser DESC
 GO

 //GetById_User
 CREATE PROC GetById_User
	@idUser int
 AS
	SELECT * FROM Users WHERE idUser = @idUser
 GO

//Insert_User
CREATE PROC Insert_User
	@Username nvarchar(50),
	@Password nvarchar(50),
	@Lever int,
	@LastIdInsert int output 
	AS 
		BEGIN
			INSERT INTO Users(Username,Password,Lever) VALUES(@Username,@Password,@Lever)
			SET @LastIdInsert = SCOPE_IDENTITY()
			RETURN @LastIdInsert
		END
	GO

//Update user
 CREATE PROC Update_User
	@idUser int,
	@Username nvarchar(50)
AS
	UPDATE Users SET Username = @Username WHERE idUser = @idUser
	SELECT * FROM Users WHERE idUser = @idUser
GO

Sau khi chúng ta thiết lập xong Stored Procedure trong SQL SERVER, Ta tạo project ASP.NET MVC 5 và import Database SQL SERVER vào project, như các bước sau đây.

stored procedure in asp.net mvc 5

Sau khi thực hiện bước như hình trên bạn sẽ hiện ra một khung tiếp theo select Data - > ADO.NET Entity Data Modell -> Next sẽ được hình bên dưới đây

stored procedure in asp.net mvc 5

Bạn gõ Máy chủ SQL SERVER của bạn, sau đó select Database mà bạn muốn thêm vào project

stored procedure in asp.net mvc 5

Tiếp tục bấm [OK] -> sẽ được hình dưới đây, đoạn code trong hình sẽ được thêm vào file Web.config trong Project , chưa biến name  connetstring "demoASPEntities" bạn có thể thay đổi nó túy ý cho dễ nhớ

stored procedure in asp.net mvc 5

Tiếp tục bạn sẽ được hình dưới đây, bạn sẽ nhìn thấy được các Table và Stored Procedure và bạn chỉ cần chọn nó để thêm vào project, chú ý, mỗi lần bạn có thêm một Table mới bên Sql Server hay là Stored Procedure mới,chỉnh sửa bất cứ gì, thì bạn cũng cần cập nhật lại bên Project lại nghe, nó mới nhận được, hồi mình chỉ bạn cách cập nhật ở các bước sau

stored procedure in asp.net mvc 5

Sau khi thực hiện các bước trên, cuối cùng ta đã import được database đến Project , bạn sẽ nhìn thấy hình dưới đây, bạn có thấy cái Update Model from Database không, sau này nếu có thêm cái gì mới thì bấm chuột Right -> Model -> Update Model from Database để thêm mới hoặc update lại Model

Bấm chuột Right Model User->chọn như hình dưới đây

stored procedure in asp.net mvc 5

Tiếp tục bạn chọn như hình dưới đây, chọn add function, có nghĩa là bạn sẽ chọn một cái Stored Procedure để add đến project

stored procedure in asp.net mvc 5

Hình dưới đây bạn có thể đặt tên gì cho dễ nhớ, để hồi ta có thể gọi thực thi nó dễ dàng hơn. 

stored procedure in asp.net mvc 5

Ok vậy là xong, giờ ta chỉ cần tạo file điều khiển gọi Stored procedure ra và sử dụng thôi.
Nếu bạn đã import thành công database vào project, tiếp theo là ta hãy tạo một File HomeController.cs trong thư mục Controllers 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Data;
using System.Data.Entity;
using System.Data.Entity.Core.Objects;
using System.Data.Entity.Core.Objects.DataClasses;
using StoredProcedureMVC5.Models;
namespace StoredProcedureMVC5.Controllers
{
    public class HomeController : Controller
    {
        private demoASPEntities _db = new demoASPEntities();
        // GET: Home
        public ActionResult Index()
        {
            var data = _db.GetAll_User_PK().ToList();
            return Json(data3, JsonRequestBehavior.AllowGet);
            
        }
    }
}

Đoạn code trên dùng gọi tới Stored Procudure name="GetAll_User_PK" hoặc name="GetAll_User" mà ta đã đặt ở các bước hình trên, câu lệnh sẽ thực và trả về dữ liệu của bảng Users trong database
Muốn tìm kiếm một phần tử và lấy dữ liệu ra cụ thể của phần tử đó như sau, ta sẽ gọi stored procedure name  = "GetById_User", sao đó chèn tham số vào

var data = _db.GetById_User(1).ToList();
return Json(data3, JsonRequestBehavior.AllowGet);

Cập nhật phần tử trong table Users:

var data = _db.Update_User(1,"ABC-XYZ").ToList();
return Json(data3, JsonRequestBehavior.AllowGet);

Thêm một phẩn tử vào table Users, sau đó trả về idUser vừa thêm

System.Data.Entity.Core.Objects.ObjectParameter returnId = new System.Data.Entity.Core.Objects.ObjectParameter("LastIdInsert", typeof(int));
             _db.Insert_User("Skipperhoa2019", "123445555", 1, returnId);
            var data3 = _db.GetById_User(returnId).ToList();
            return Json(data3, JsonRequestBehavior.AllowGet);

Trong đoạn code thêm bên trên, các bạn chú ý "LastIdInsert" nó là tham số ta khai báo trong Stored Procedure của ta, dùng để Output tham số ra
Còn một cách nửa, bạn có thể sử dụng gọi Stored Procedure như sau:

context.Database.SqlQuery<EntityType>(
    "EXEC ProcName @param1, @param2", 
    new SqlParameter("param1", param1), 
    new SqlParameter("param2", param2)
);

EntityType: là tên model của bạn
ProcName: tên của Stored Procedure
SqlParameter: dùng chèn tham số cho Stored Procedure

Bạn có thể tìm hiểu thêm cách trên , cách trên rất tuyệt vời vì nó có chưa EXEC giống như ta đang chạy câu lệnh trong SQL SERVER vậy!

Tag: ASP.NET MVC