انشاء السجلات في ADO.NET in ASP.NET Core Application
-
بنتعلم في هذا الدرس كيفية تطبيق العمليات CRUD في Net Core. وموضوعنا في هذا الدرس كيف ممكن نضيف data في قواعد البيانات Create Records ،بنعمل View لادخال البيانات وقراءتها وبعدها بنعرض البيانات من قاعدة البيانات في View ثاني
تمام سنقوم هنا بإنشاء شاشة خاصة لتسجيل طالب جديد في قاعدة البيانات ثم عرض جميع الطلاب بشاشة مستقلة.
بنكمل شغل على مشروعنا السابق StudentAcademy
تأكد من وجود class في المشروع باسم StudentsModel إذا لم تقم بذلك من قبل انتقل الى مجلد Models ومن ثم أضف class جديد باسم StudentsModel
وبعد هيك نضيف الكود التالي:
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Threading.Tasks;
namespace StudentsAcademy.Models
{
public class StudentsModel
{
public int StudentID { get; set; }
public string StudentNo { get; set; }
[Required(ErrorMessage = "Please enter name")]
[StringLength(150)]
public string FullName { get; set; }
[DataType(DataType.Date)]
public DateTime Birthday { get; set; }
public int Gender { get; set; }
public int Nationality { get; set; }
public string Address { get; set; }
[Required(ErrorMessage = "Please enter User Name")]
[StringLength(20)]
public string UserName { get; set; }
[Required(ErrorMessage = "Please enter Password")]
[StringLength(20)]
[DataType(DataType.Password)]
public string Password { get; set; }
[Required(ErrorMessage = "Confirm Password is required")]
[DataType(DataType.Password)]
[Compare("Password")]
public string ConfirmPassword { get; set;}
[Required(ErrorMessage = "Please enter Email")]
[RegularExpression("^[a-z0-9_+-]+(.[a-z0-9_+-]+)*@[a-z0-9-]+(.[a-z0-9]+)*.([a-z]{2,4})$", ErrorMessage = "Invalid email format.")]
[StringLength(20)]
public string Email { get; set; }
[Required(ErrorMessage = "Mobile is required")]
[RegularExpression(@"d{10}", ErrorMessage = "Please enter 10 digit Mobile No.")]
public string Mobile { get; set; }
public string Note { get; set; }
public DateTime CreatedDate { get; set; }
public DateTime CurrentDate { get; set; }
public PaymentModel Payment { get; set; }
public Address StudentAddress { get; set; }
}
}
لاحظ ان اضفنا الكود System.ComponentModel.DataAnnotations الي هو عبارة عن Namespace لغرض اجراء validation في شاشة التسجيل.
Attribute validation | الوصف |
Required | تستخدم في حال كان المطلوب ان يكون الحقل اجباري طريقة الكتابة [Required(ErrorMessage = "Please enter name")] في الكود الاسبق طبقناها على FullName |
StringLength | تستخدم عندما يكون المطلوب ان يكون طول هذا الحقل لا يجب ان يتجاوز قيمة محددة طريقة الكتابة [StringLength(150)] هنا اقصى طول مسموح هو 150 حرف |
DataType | يستخدم مع اناع محدده مثل (كلمة مرور ـ ايميل – نص – HTML)طريقة الكتابة [DataType(DataType.Password)] |
RegularExpression | تستخدم للتعامل مع تعابير محدده بحيث يجب ان يدخل في هذا الحقل. مثل البريد الإلكتروني ، الموقع الإلكتروني الكود التالي خاص في البريد الإلكتروني [RegularExpression("^[a-z0-9_+-]+(.[a-z0-9_+-]+)*@[a-z0-9-]+(.[a-z0-9]+)*.([a-z]{2,4})$", ErrorMessage = "Invalid email format.")] |
للمزيد حول هذه DataAnnotations انقر فوق الرابط DataAnnotations
تمام هيك بنكون جهزنا Model.
الان نعمل على انشاء Controller
انتقل الى ملف StudentsController في مجلد Controllers، وفي حال ما كان موجد قم بإضافته بالنقر يمين فوق مجلد Controllers ثم اختر Add- New Controller

public IActionResult NewStudent()
{
return View();
}
الان باقي نجهز View الي من خلالو بنعمل على ادخال بيانات الطالب.
لذا تأكد من وجود View باسم NewStudent وفي حال ما كان موجود، لازم تضيف View جديدة تسمى NewStudent.cshtml داخل مجلد Views ➤ Students
للتكير اسم View لازم يكون نفس اسم action في controller ، ولاضافة View بتم عن طريق النقر يمين فوق action وبنختار Add New View .
وأضف الكود أدناه إليه
@model StudentsModel
@{
Layout = null;
}
<meta name="viewport" content="width=device-width" />
<title>Index</title>
<link href="~/lib/bootstrap/dist/css/bootstrap.css" rel="stylesheet" />
@*Welcome ,@TempData["UserName"]*@
Welcome,@HttpContextAccessor.HttpContext.Session.GetString("UserName")
<hr />
<div class="container">
<form id="external-account" asp-page="" asp-route-returnUrl="" method="post" class="form-horizontal">
<div class="form-group">
<label>FullName:</label>
<input class="form-control" asp-for="FullName" />
<span asp-validation-for="FullName" class="text-danger"></span>
</div>
<div class="form-group">
<label>Birthday:</label>
<input class="form-control" asp-for="Birthday" />
<span asp-validation-for="Birthday" class="text-danger"></span>
</div>
<div class="form-group">
<label>Gender:</label>
<select class="form-control" asp-for="Gender">
<option value="M">Male</option>
<option value="F">Female</option>
</select>
<span asp-validation-for="Gender" class="text-danger"></span>
</div>
<div class="form-group">
<label>Nationality:</label>
<select class="form-control" asp-for="Nationality">
<option value="M">Jordan</option>
<option value="F">Saudi Aribae</option>
<option value="F">UAE</option>
</select>
<span asp-validation-for="Nationality" class="text-danger"></span>
</div>
<div class="form-group">
<label>Address:</label>
<input class="form-control" asp-for="Address" />
<span asp-validation-for="Address" class="text-danger"></span>
</div>
<div class="form-group">
<label>UserName:</label>
<input class="form-control" asp-for="UserName" />
<span asp-validation-for="UserName" class="text-danger"></span>
</div>
<div class="form-group">
<label>Password:</label>
<input class="form-control" asp-for="Password" />
<span asp-validation-for="Password" class="text-danger"></span>
</div>
<div class="form-group">
<label>Email:</label>
<input class="form-control" asp-for="Email" />
<span asp-validation-for="Email" class="text-danger"></span>
</div>
<div class="form-group">
<label>Mobile:</label>
<input class="form-control" asp-for="Mobile" />
<span asp-validation-for="Mobile" class="text-danger"></span>
</div>
<div class="form-group">
<label>Note:</label>
<input class="form-control" asp-for="Note" />
<span asp-validation-for="Note" class="text-danger"></span>
</div>
<button class="btn btn-primary" type="submit">Submit</button>
</form>
</div>
@{ await Html.RenderPartialAsync("_ValidationScriptsPartial"); }
تمام
في هذا View أضفنا رابط لملف bootstrap CSS في قسم head بهذف عرض ال View بشكل مرتب وجميل :
<link href="~/lib/bootstrap/dist/css/bootstrap.css" rel="stylesheet" />
تأخذ View هذه model من نوع StudentsModel class ، حيث قمنا بإنشاء مجموعة من labels و Input controls في form ، باستخدام asp-for tag helper مع حقول model.
للمزيد حول View يمكن الانتقال الى الرابط Views in ASP.NET Core
يساعدنا asp-for tag helper أيضًا في إنشاء ميزة Model Binding، حتى نتمكن من الحصول على جميع قيم input controls لطريقة إنشاء action الخاصة بي.

لحد الان عملنا action فقط لاستدعاء View. حاول تشغل التطبيق لحد الان وشوف النتيجة
الان دور نعمل action لحفظ البيانات، تمام خلونا نعمل action جديد باسم NewStudent من نوع [HttpPost] واضف الكود التالي اليه:
// HTTP POST VERSION
[HttpPost]
public IActionResult NewStudent(StudentsModel studentsModel)
{
string connectionString = Configuration["ConnectionStrings:DefaultConnection"];
using (SqlConnection connection = new SqlConnection(connectionString))
{
string sql = $"Insert Into Inventory (FullName, Birthday, Gender, Nationality, Address, UserName, Password, Email, Mobile, Note,CreatedDate)Values({studentsModel.FullName}, {studentsModel.Birthday},{studentsModel.Gender},{studentsModel.Nationality},{studentsModel.Address},{studentsModel.UserName},{studentsModel.Password},{studentsModel.Email},{studentsModel.Mobile},{studentsModel.Note},{DateTime.Now.Date})";
using (SqlCommand command = new SqlCommand(sql, connection))
{
command.CommandType = CommandType.Text;
connection.Open();
command.ExecuteNonQuery();
connection.Close();
}
}
ViewBag.Result = "Success";
return View("AllStudent", studentsModel);
}
public IConfiguration Configuration { get; }
public StudentsController(IConfiguration configuration)
{
Configuration = configuration;
}
string connectionString = Configuration["ConnectionStrings:DefaultConnection"];
using (SqlConnection connection = new SqlConnection(connectionString))
{
//...
}
string sql = $"Insert Into Students (FullName, Birthday, Gender, Nationality, Address, UserName, Password, Email, Mobile, Note, CreatedDate) Values ({studentsModel.FullName}, {studentsModel.Birthday},{studentsModel.Gender},{studentsModel.Nationality},{studentsModel.Address},{studentsModel.UserName},{studentsModel.Password},{studentsModel.Email},{studentsModel.Mobile},{studentsModel.Note},{DateTime.Now.Date})";
- SQL Statement String
- SQL Connection Object
using (SqlCommand command = new SqlCommand(sql, connection))
{
//...
}
command.CommandType = CommandType.Text;
connection.Open();
command.ExecuteNonQuery();
connection.Close();
public class StudentsController : Controller
{
public IConfiguration Configuration { get; }
public StudentsController(IConfiguration configuration)
{
Configuration = configuration;
}
// HTTP GET VERSION
public IActionResult NewStudent()
{
return View();
}
// HTTP POST VERSION
[HttpPost]
public IActionResult NewStudent(StudentsModel studentsModel)
{
string connectionString = Configuration["ConnectionStrings:DefaultConnection"];
using (SqlConnection connection = new SqlConnection(connectionString))
{
string sql = $"Insert Into Students (FullName, Birthday, Gender, Nationality, Address, UserName, Password, Email, Mobile, Note, CreatedDate) Values ({studentsModel.FullName}, {studentsModel.Birthday},{studentsModel.Gender},{studentsModel.Nationality},{studentsModel.Address},{studentsModel.UserName},{studentsModel.Password},{studentsModel.Email},{studentsModel.Mobile},{studentsModel.Note},{DateTime.Now.Date})";
using (SqlCommand command = new SqlCommand(sql, connection))
{
command.CommandType = CommandType.Text;
connection.Open();
command.ExecuteNonQuery();
connection.Close();
}
}
ViewBag.Result = "Success";
return View("AllStudent", studentsModel);
}
public IActionResult Index()
{
return View();
}
}
https://localhost:44382/students/newstudent




USE [StudentsAcademy]
GO
/****** Object: Trigger [dbo].[GenerateStudentNumber] Script Date: 24/09/2021 18:08:19 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
Create trigger [dbo].[GenerateStudentNumber] on [dbo].[Students] AFTER INSERT
as
begin
declare @ID int
select @ID = StudentId from inserted
update Students set StudentNo =(select isnull(cast(max(StudentNo) as int)+1,right(DATEPART(yy,getdate()),2)+00001) from Students where
StudentNo>= right(DATEPART(yy,getdate()),2)+00001)
where StudentId=@ID
end
right(DATEPART(yy,getdate()),2)
YY0000x

string sql = $"set dateformat dmy Insert Into Students (FullName, Birthday, Gender, Nationality, Address, UserName, Password, Email, Mobile, Note, CreatedDate) Values ({studentsModel.FullName}, {studentsModel.Birthday},{studentsModel.Gender},{studentsModel.Nationality},{studentsModel.Address},{studentsModel.UserName},{studentsModel.Password},{studentsModel.Email},{studentsModel.Mobile},{studentsModel.Note},{DateTime.Now.Date})";
string sql = $"set dateformat dmy Insert Into Students (FullName, Birthday, Gender, Nationality, Address, UserName, Password, Email, Mobile, Note, CreatedDate) Values (@FullName,@Birthday,@Gender,@Nationality,@Address,@UserName,@Password,@Email,@Mobile,@Note,@Date)";
Description | Name |
الحصول على أو تحديد اسم parameter. | ParameterName |
الحصول على أو تحديد قيمة parameter. | Value |
الحصول على أو تعيين نوع بيانات SQL Server ل parameter | SqlDbType |
الحصول على أو تحديد الحد الأقصى لحجم البيانات ل parameter باستخدام bytes | Size |
الحصول على أو تحديد ما إذا كانت parameter تقبل القيم null أم لا. | IsNullable |
الحصول على أو تحديد ما إذا كانت parameter هي معلمة الإدخال فقط input-only أو الإخراج فقط output-only أو ثنائية الاتجاه bidirectional أو معلمة قيمة الإرجاع return value parameter. | Direction |
// HTTP POST VERSION using Parameterized Command
[HttpPost]
public IActionResult NewStudent(StudentsModel studentsModel)
{
string connectionString = Configuration["ConnectionStrings:DefaultConnection"];
using (SqlConnection connection = new SqlConnection(connectionString))
{
string sql = $"set dateformat dmy Insert Into Students (FullName, Birthday, Gender, Nationality, Address, UserName, Password, Email, Mobile, Note, CreatedDate) Values (@FullName,@Birthday,@Gender,@Nationality,@Address,@UserName,@Password,@Email,@Mobile,@Note,@Date)";
using (SqlCommand command = new SqlCommand(sql, connection))
{
command.CommandType = CommandType.Text;
// adding parameters
SqlParameter parameter = new SqlParameter
{
ParameterName = "@FullName",
Value = studentsModel.FullName,
SqlDbType = SqlDbType.NVarChar,
Size = 200
};
command.Parameters.Add(parameter);
parameter = new SqlParameter
{
ParameterName = "@Birthday",
Value = studentsModel.Birthday,
SqlDbType = SqlDbType.DateTime
};
command.Parameters.Add(parameter);
parameter = new SqlParameter
{
ParameterName = "@Gender",
Value = studentsModel.Gender,
SqlDbType = SqlDbType.Int
};
command.Parameters.Add(parameter);
parameter = new SqlParameter
{
ParameterName = "@Nationality",
Value = studentsModel.Nationality,
SqlDbType = SqlDbType.Int
};
command.Parameters.Add(parameter);
parameter = new SqlParameter
{
ParameterName = "@Address",
Value = studentsModel.Address,
SqlDbType = SqlDbType.NVarChar,
Size=500
};
command.Parameters.Add(parameter);
parameter = new SqlParameter
{
ParameterName = "@UserName",
Value = studentsModel.UserName,
SqlDbType = SqlDbType.VarChar,
Size = 10
};
command.Parameters.Add(parameter);
parameter = new SqlParameter
{
ParameterName = "@Password",
Value = studentsModel.Password,
SqlDbType = SqlDbType.VarChar,
Size = 200
};
command.Parameters.Add(parameter);
parameter = new SqlParameter
{
ParameterName = "@Email",
Value = studentsModel.Email,
SqlDbType = SqlDbType.VarChar,
Size = 50
};
command.Parameters.Add(parameter);
parameter = new SqlParameter
{
ParameterName = "@Mobile",
Value = studentsModel.Mobile,
SqlDbType = SqlDbType.VarChar,
Size = 10
};
command.Parameters.Add(parameter);
parameter = new SqlParameter
{
ParameterName = "@Note",
Value = studentsModel.Note,
SqlDbType = SqlDbType.VarChar
};
command.Parameters.Add(parameter);
parameter = new SqlParameter
{
ParameterName = "@Date",
Value = DateTime.Now,
SqlDbType = SqlDbType.DateTime
};
command.Parameters.Add(parameter);
connection.Open();
command.ExecuteNonQuery();
connection.Close();
}
}
ViewBag.Result = "Success";
return View("AllStudent");
}
string sql = $"set dateformat dmy Insert Into Students (FullName, Birthday, Gender, Nationality, Address, UserName, Password, Email, Mobile, Note, CreatedDate) Values (@FullName,@Birthday,@Gender,@Nationality,@Address,@UserName,@Password,@Email,@Mobile,@Note,@Date)";
SqlParameter parameter = new SqlParameter
{
ParameterName = "@FullName",
Value = studentsModel.FullName,
SqlDbType = SqlDbType.NVarChar,
Size = 200
};
command.Parameters.Add(parameter);
command.Parameters.Add(parameter);
parameter = new SqlParameter
{
ParameterName = "@Birthday",
Value = studentsModel.Birthday,
SqlDbType = SqlDbType.DateTime
};
command.Parameters.Add(parameter);
https://localhost:44382/students/newstudent



create proc Add_New_Student(
@FullName nvarchar(200) ,
@Birthday datetime ,
@Gender int ,
@Nationality int ,
@Address nvarchar(500) ,
@UserNamen varchar(10) ,
@Password nvarchar(200) ,
@Email nvarchar(50) ,
@Mobile nvarchar(10) ,
@Note ntext,
@Result VARCHAR(50) OUTPUT
)
as
begin
INSERT INTO Students
(
FullName,
Birthday,
Gender,
Nationality,
Address,
UserName,
Password,
Email,
Mobile,
Note,
CreatedDate
)
values
(
@FullName ,
@Birthday ,
@Gender ,
@Nationality ,
@Address ,
@UserNamen ,
@Password ,
@Email ,
@Mobile ,
@Note ,
GETDATE()
)
SET @Result=@@#Success@@#
end
@FullName nvarchar(200) ,
@Birthday datetime ,
@Gender int ,
@Nationality int ,
@Address nvarchar(500) ,
@UserNamen varchar(10) ,
@Password nvarchar(200) ,
@Email nvarchar(50) ,
@Mobile nvarchar(10) ,
@Note ntext,
// HTTP POST VERSION using SP
[HttpPost]
public IActionResult NewStudent(StudentsModel studentsModel)
{
string connectionString = Configuration["ConnectionStrings:DefaultConnection"];
using (SqlConnection connection = new SqlConnection(connectionString))
{
string sql = "Add_New_Student";
using (SqlCommand command = new SqlCommand(sql, connection))
{
command.CommandType = CommandType.StoredProcedure;
// adding parameters
SqlParameter parameter = new SqlParameter
{
ParameterName = "@FullName",
Value = studentsModel.FullName,
SqlDbType = SqlDbType.NVarChar,
Size = 200
};
command.Parameters.Add(parameter);
parameter = new SqlParameter
{
ParameterName = "@Birthday",
Value = studentsModel.Birthday,
SqlDbType = SqlDbType.DateTime
};
command.Parameters.Add(parameter);
parameter = new SqlParameter
{
ParameterName = "@Gender",
Value = studentsModel.Gender,
SqlDbType = SqlDbType.Int
};
command.Parameters.Add(parameter);
parameter = new SqlParameter
{
ParameterName = "@Nationality",
Value = studentsModel.Nationality,
SqlDbType = SqlDbType.Int
};
command.Parameters.Add(parameter);
parameter = new SqlParameter
{
ParameterName = "@Address",
Value = studentsModel.Address,
SqlDbType = SqlDbType.NVarChar,
Size = 500
};
command.Parameters.Add(parameter);
parameter = new SqlParameter
{
ParameterName = "@UserName",
Value = studentsModel.UserName,
SqlDbType = SqlDbType.VarChar,
Size = 10
};
command.Parameters.Add(parameter);
parameter = new SqlParameter
{
ParameterName = "@Password",
Value = studentsModel.Password,
SqlDbType = SqlDbType.VarChar,
Size = 200
};
command.Parameters.Add(parameter);
parameter = new SqlParameter
{
ParameterName = "@Email",
Value = studentsModel.Email,
SqlDbType = SqlDbType.VarChar,
Size = 50
};
command.Parameters.Add(parameter);
parameter = new SqlParameter
{
ParameterName = "@Mobile",
Value = studentsModel.Mobile,
SqlDbType = SqlDbType.VarChar,
Size = 10
};
command.Parameters.Add(parameter);
parameter = new SqlParameter
{
ParameterName = "@Note",
Value = studentsModel.Note,
SqlDbType = SqlDbType.VarChar
};
command.Parameters.Add(parameter);
parameter = new SqlParameter
{
ParameterName = "@Result",
SqlDbType = SqlDbType.VarChar,
Size = 50,
Direction = ParameterDirection.Output
};
command.Parameters.Add(parameter);
connection.Open();
command.ExecuteNonQuery();
string result = Convert.ToString(command.Parameters["@Result"].Value);
ViewBag.Result = result;
connection.Close();
}
}
ViewBag.Result = "Success";
return View("AllStudent");
}
string sql = " Add_New_Student";
command.CommandType = CommandType.StoredProcedure;
parameter = new SqlParameter
{
ParameterName = "@Result",
SqlDbType = SqlDbType.VarChar,
Size = 50,
Direction = ParameterDirection.Output
};
command.Parameters.Add(parameter);
string result= Convert.ToString(command.Parameters["@Result"].Value);
…
<div class="container-fluid">
<h1>Create an Inventory</h1>
<h2 class="alert alert-danger">@ViewBag.Result</h2>
<form method="post">
…
</form>
</div>
اترك تعليقك