عملیات CRUD با استفاده از ADO.Net در MVC

سه شنبه 6 بهمن 1394

عملیات CRUD یا همان Create , Read, Update ,Delete در مقاله های قبلی در MVC پیاده سازی شده است. در این مقاله قصد داریم به همراه یک مثال ساده این عملیات را با استفاده از ADO.net در MVC پیاده سازی کنیم.

 عملیات  CRUD با استفاده از ADO.Net در MVC

عملیات  CRUD یا همان  Create , Read, Update ,Delete در مقاله های قبلی در  MVC پیاده سازی شده است. در این مقاله قصد داریم به همراه یک مثال ساده این عملیات را با استفاده از  ADO.net  در  MVC پیاده سازی کنیم.

برای استفاده از  ADO.net  به یک دیتابیس نیاز داریم . اینجا دیتابیس ما یک جدول دارد که می توانید با استفاده از کد های زیر آن را در  SQL ایجاد کنید .

SET ANSI_NULLS ON  
GO  
  
SET QUOTED_IDENTIFIER ON  
GO  
  
SET ANSI_PADDING ON  
GO  
  
CREATE TABLE [dbo].[tblStudent](  
[student_id] [int] IDENTITY(1,1) NOT NULL,  
[student_name] [Nvarchar](50) NOT NULL,  
[stduent_age] [int] NOT NULL,  
[student_gender] [Nvarchar](6) NOT NULL,  
CONSTRAINT [PK_tblStudent] PRIMARY KEY CLUSTERED  
(  
[student_id] ASC  
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]  
) ON [PRIMARY]  
  
GO  
  
SET ANSI_PADDING OFF  
GO  

 

سپس یک پروژه به صورت  Empty  در  MVC ایجاد میکنیم.

یک کنترلر  Empty  با نام   Home  ایجاد میکنیم.

 

بعد از اضافه کردن کنترلر ، پوشه ای با نام  Home  در پوشه  View  ایجاد خواهد شد.

دسترسی به بانک از طریق  پوشه  Models  انجام خواهد شد.  Model یک فایل کلاس است . بر روی مدل راست کلیک کرده و کلاسی با نام  CRUDModel ایجاد میکنیم.

در این کلاس کدهای زیر  را قرار دهید.

using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Web;

namespace MVCWithADO.Models
{
    public class CRUDModel
    {
        /// <summary>  
        /// Get all records from the DB  
        /// </summary>  
        /// <returns>Datatable</returns>  
        public DataTable GetAllStudents()
        {
            DataTable dt = new DataTable();
            string strConString = @"Data Source=.;Initial Catalog=MyDB;User ID=sa; Password=123";
            using (SqlConnection con = new SqlConnection(strConString))
            {
                con.Open();
                SqlCommand cmd = new SqlCommand("Select * from tblStudent", con);
                SqlDataAdapter da = new SqlDataAdapter(cmd);
                da.Fill(dt);
            }
            return dt;
        }

        /// <summary>  
        /// Get student detail by Student id  
        /// </summary>  
        /// <param name="intStudentID"></param>  
        /// <returns></returns>  
        public DataTable GetStudentByID(int intStudentID)
        {
            DataTable dt = new DataTable();

            string strConString = @"Data Source=.;Initial Catalog=MyDB;User ID=sa; Password=123";

            using (SqlConnection con = new SqlConnection(strConString))
            {
                con.Open();
                SqlCommand cmd = new SqlCommand("Select * from tblStudent where student_id=" + intStudentID, con);
                SqlDataAdapter da = new SqlDataAdapter(cmd);
                da.Fill(dt);
            }
            return dt;
        }

        /// <summary>  
        /// Update the student details  
        /// </summary>  
        /// <param name="intStudentID"></param>  
        /// <param name="strStudentName"></param>  
        /// <param name="strGender"></param>  
        /// <param name="intAge"></param>  
        /// <returns></returns>  
        public int UpdateStudent(int intStudentID, string strStudentName, string strGender, int intAge)
        {
            string strConString = @"Data Source=.;Initial Catalog=MyDB;User ID=sa; Password=123";

            using (SqlConnection con = new SqlConnection(strConString))
            {
                con.Open();
                string query = "Update tblStudent SET student_name=@studname, student_age=@studage , student_gender=@gender where student_id=@studid";
                SqlCommand cmd = new SqlCommand(query, con);
                cmd.Parameters.AddWithValue("@studname", strStudentName);
                cmd.Parameters.AddWithValue("@studage", intAge);
                cmd.Parameters.AddWithValue("@gender", strGender);
                cmd.Parameters.AddWithValue("@studid", intStudentID);
                return cmd.ExecuteNonQuery();
            }
        }

        /// <summary>  
        /// Insert Student record into DB  
        /// </summary>  
        /// <param name="strStudentName"></param>  
        /// <param name="strGender"></param>  
        /// <param name="intAge"></param>  
        /// <returns></returns>  
        public int InsertStudent(string strStudentName, string strGender, int intAge)
        {
            string strConString = @"Data Source=.;Initial Catalog=MyDB;User ID=sa; Password=123";

            using (SqlConnection con = new SqlConnection(strConString))
            {
                con.Open();
                string query = "Insert into tblStudent (student_name, student_age,student_gender) values(@studname, @studage , @gender)";
                SqlCommand cmd = new SqlCommand(query, con);
                cmd.Parameters.AddWithValue("@studname", strStudentName);
                cmd.Parameters.AddWithValue("@studage", intAge);
                cmd.Parameters.AddWithValue("@gender", strGender);
                return cmd.ExecuteNonQuery();
            }
        }

        /// <summary>  
        /// Delete student based on ID  
        /// </summary>  
        /// <param name="intStudentID"></param>  
        /// <returns></returns>  
        public int DeleteStudent(int intStudentID)
        {
            string strConString = @"Data Source=.;Initial Catalog=MyDB;User ID=sa; Password=123";

            using (SqlConnection con = new SqlConnection(strConString))
            {
                con.Open();
                string query = "Delete from tblStudent where student_id=@studid";
                SqlCommand cmd = new SqlCommand(query, con);
                cmd.Parameters.AddWithValue("@studid", intStudentID);
                return cmd.ExecuteNonQuery();
            }
        }  
    }
}

 

در کنترلر  ActionResult index  را به صورت زیر تعریف میکنیم.  که تمام ردیف های دیتابیس را واکشی کرده و نمایش می دهد.

 public ActionResult Index()
        {
            CRUDModel model = new CRUDModel();
            DataTable dt = model.GetAllStudents();
            return View("Index", dt);
        }

کد زیر برای اضافه کردن رکوردهای جدول است :

   public ActionResult Insert()
        {
            return View("Create");
        }

برای ثبت رکوردها در جدول از کد زیر استفاده می شود :

public ActionResult InsertRecord(FormCollection frm, string action)
        {
            if (action == "Submit")
            {
                CRUDModel model = new CRUDModel();
                string name = frm["txtName"];
                int age = Convert.ToInt32(frm["txtAge"]);
                string gender = frm["gender"];
                int status = model.InsertStudent(name, gender, age);
                return RedirectToAction("Index");
            }
            else
            {
                return RedirectToAction("Index");
            }
        }

کد زیر برای ویرایش رکوردها است:

  public ActionResult Edit(int StudentID)
        {
            CRUDModel model = new CRUDModel();
            DataTable dt = model.GetStudentByID(StudentID);
            return View("Edit", dt);
        }

برای بروزرسانی داده ها و یا انصراف از بروزرسانی از کد زیر استفاده می شود :

public ActionResult UpdateRecord(FormCollection frm, string action)
        {
            if (action == "Submit")
            {
                CRUDModel model = new CRUDModel();
                string name = frm["txtName"];
                int age = Convert.ToInt32(frm["txtAge"]);
                string gender = frm["gender"];
                int id = Convert.ToInt32(frm["hdnID"]);
                int status = model.UpdateStudent(id, name, gender, age);
                return RedirectToAction("Index");
            }
            else
            {
                return RedirectToAction("Index");
            }
        }

و برای حذف رکوردها کد به صورت زیر خواهد بود:

   public ActionResult Delete(int StudentID)
        {
            CRUDModel model = new CRUDModel();
            model.DeleteStudent(StudentID);
            return RedirectToAction("Index");
        }  

کنترلر ایجاد شد اما هنوز View ها برای نمایش اطلاعات ایجاد نشده اند . در کنترلر با راست کلیک بر روی  ActionResult  مربوطه  View ها را به صورت  Empty  ایجاد کنید .

کد ها در  View با نام  index به صورت زیر می باشد :

@using System.Data
@using System.Data.SqlClient
@model System.Data.DataTable
@{
    Layout = null;
}

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>نمایش اطلاعات دانش آموزان</title>
</head>
<body dir="rtl">
    <form method="post" name="Display">
        <h3><a  href="http://barnamenevisan.org/">مرجع تخصصی برنامه نویسان</a></h3>
        @Html.ActionLink("اضافه کردن رکورد جدید", "Insert")
        <br />
        @{
            if (Model.Rows.Count > 0)
            {
                <table border="1">
                    <thead>
                        <tr>
                            <td>
                               کد دانش آموز
                            </td>
                            <td>
                                نام
                            </td>
                            <td>
                                سن
                            </td>
                            <td>جنسیت</td>
                        </tr>
                    </thead>
                    @foreach (DataRow dr in Model.Rows)
                    {
                        <tr>
                            <td>@dr["student_id"].ToString()  </td>
                            <td>@dr["student_name"].ToString()  </td>
                            <td>@dr["student_age"].ToString()  </td>
                            <td>@dr["student_gender"].ToString()  </td>
                            <td>@Html.ActionLink("ویرایش ", "Edit", new { StudentID = dr["student_id"].ToString() })</td>
                            <td>@Html.ActionLink("| حذف", "Delete", new { StudentID = dr["student_id"].ToString() })</td>
                        </tr>
                    }

                </table>
                <br />
            }
            else
            {
                <span>رکوردی یافت نشد!!</span>
            }
        }

    </form>
</body>
</html>  

 

برای اضافه کردن رکوردها در View  با نام  Create  کدها به صورت زیر خواهد بود :

<!DOCTYPE html>
<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>وارد کردن رکورد جدید</title>
</head>
<body>
    <form id="frmDetail" method="post" action="@Url.Action("InsertRecord")">
        نام را وارد کنید :<input name="txtName" />
        <br />
        سن را وارد کنید :<input name="txtAge" />
        <br />
        جنسیت را انتخاب کنید : <input type="radio" name="gender" value="مرد" checked>مرد
        <input type="radio" name="gender" value="زن">زن
        <br />
        <input type="submit" value="Submit" name="action" />
        <input type="submit" value="Cancel" name="action" />
    </form>
</body>
</html>  

 

و برای ویرایش اطلاعات کدها در  View  با نام  Edit به صورت زیر خواهد بود  :

@using System.Data
@using System.Data.SqlClient
@model System.Data.DataTable
@{
    ViewBag.Title = "EditView";
}
<html>
<head>
    <title></title>
    <script type="text/javascript"></script>
</head>
<body dir="rtl">
    <form id="frmDetail" method="post" action="@Url.Action("UpdateRecord")">
       نام را وارد کنید : <input name="txtName" value="@Model.Rows[0]["student_name"]" />
        <br />
        سن را وارد کنید :<input name="txtAge" value="@Model.Rows[0]["student_age"]" />
        <br />
        جنسیت را انتخاب کنید :

        @if (Model.Rows[0]["student_gender"].ToString().ToLower() == "male")
        {
            <input type="radio" name="gender" value="male" checked /> @Html.Raw("Male")
            <input type="radio" name="gender" value="female" /> @Html.Raw("Female")
        }
        else
        {
            <input type="radio" name="gender" value="male">  @Html.Raw("Male")
            <input type="radio" name="gender" value="female" checked /> @Html.Raw("Female")
        }
        <input type="hidden" name="hdnID" value="@Model.Rows[0]["student_id"]" />
        <br />
        <input type="submit" value="Submit" name="action" />
        <input type="submit" value="Cancel" name="action" />
    </form>
</body>
</html> 

پس از اجرای برنامه نتیجه به صورت زیر خواهد بود :

 

 

 

فایل های ضمیمه

برنامه نویسان

نویسنده 3355 مقاله در برنامه نویسان

کاربرانی که از نویسنده این مقاله تشکر کرده اند

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید