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 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
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.
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
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
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ớ
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
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
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
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.
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!