В этом учебном пособии по ASP.NET Core вы с самого начала научитесь выполнять операции CRUD в ADO.NET. Это руководство поможет вам изучить ADO.NET, чтобы вы могли начать программировать базы данных в ASP.NET CORE с C #.

Загрузите полный исходный код этого приложения с GitHub
________________________________________________________

Аудитория

Это руководство предназначено для всех, кто хочет быстро изучить ASP.NET Core и ADO.NET. Все объясняется легко и шаг за шагом. Вы можете загрузить полный исходный код и запустить его на своем ПК.

Здесь я выполню операции CRUD (CREATE, READ, UPDATE & DELETE) над таблицей учителей в базе данных SQL Server.

Я лично считаю, что «лучший способ изучить любой язык программирования - это в первую очередь построить операции CRUD».

Это руководство состоит из следующих разделов:

1. Создание нового веб-приложения ASP.NET Core.

2. Настройка веб-приложения ASP.NET Core

3. Создайте Layout, ViewImports, ViewStart и добавьте Bootstrap.

4. Создание базы данных

5. Добавление строки подключения базы данных в приложение.

6. Добавление модельного класса для учителя.

7. Добавление функции проверки на стороне клиента

8. Выполнение функции CREATE Teacher

9. Выполнение функции READ Teacher

10. Выполнение функции учителя ОБНОВЛЕНИЯ

11. Выполнение функции DELETE Teacher

1. Создание нового веб-приложения ASP.NET Core

В Visual Studio выберите «Файл› Новый проект ». Откроется новое окно, здесь:

а. Слева выберите «Installed > Visual C# > Web».

б. В средней части выберите «ASP.NET Core Web Application».

c. В нижней части укажите имя проекта как «CRUDADO» или что угодно и выберите место на диске, где будут храниться файлы проекта. Также выберите вариант - «Create directory for solution» и, наконец, нажмите кнопку «OK», чтобы создать свой проект.

Затем откроется новое окно, в котором вас попросят выбрать шаблон проекта, точечную сетку и еще несколько вещей. В этом окне убедитесь, что вы выбрали следующее:

а. В 2 раскрывающихся меню вверху выберите «.NET Core» и «ASP.NET Core 2.0». Вы также можете выбрать версию ASP.NET Core выше 2.0.

б. Выберите шаблон проекта ‘Empty’.

c. Нажмите кнопку «OK», чтобы создать веб-приложение ASP.NET Core.

2. Настройка веб-приложения ASP.NET Core

Ваше приложение должно поддерживать структуру MVC, маршрутизацию и статические файлы. Все это можно сделать из класса Startup.cs, который находится в корне приложения.

Откройте класс Startup.cs и добавьте эти поддержки внутри методов ConfigureServices() и Configure(), как показано ниже:

using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.DependencyInjection;
namespace CRUDADO
{
    public class Startup
    {
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddMvc();
        }
        public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            app.UseStaticFiles();
            app.UseDeveloperExceptionPage();
            app.UseMvc(routes =>
            {
                routes.MapRoute(
                name: "default",
                template: "{controller=Home}/{action=Index}/{id?}");
            });
        }
    }
}

3. Создайте макет, ViewImports, ViewStart и добавьте Bootstrap

Создайте папку «Views» в корне вашего проекта и внутри нее создайте папку «Shared».

Затем щелкните правой кнопкой мыши папку «Shared» и выберите «Add > New Item». Вы увидите новое окно со списком элементов, из этого списка выберите «MVC View Layout Page» и нажмите кнопку «Add».

Это добавит _Layout.cshtml файл в общую папку, и он будет открыт для редактирования. В него нужно добавить следующий код:

<!DOCTYPE html>
<html>
<head>
    <title>@ViewData["Title"]</title>
    <meta name="viewport" content="width=device-width" />
    <link href="/lib/bootstrap/dist/css/bootstrap.css" rel="stylesheet" />
</head>
<body class="m-1 p-1">
    @RenderBody()
</body>
</html>

Затем загрузите пакет Bootstrap и извлеките содержимое zip-файла Bootstrap в папку wwwroot > lib вашего проекта.

Bootstrap используется для создания адаптивного макета, удобного для мобильных устройств. Это самый популярный фреймворк CSS в мире.

Затем щелкните правой кнопкой мыши папку «Views» и выберите «Add > New Item». В списке элементов выберите «MVC View Imports Page» и нажмите кнопку «Add». Это добавит _ViewImports.cshtml файл.

Импортируйте встроенное пространство имен помощников и моделей тегов для представлений, добавив в этот файл следующий код:

@using CRUDADO.Models
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers

Таким же образом щелкните правой кнопкой мыши папку «Views» и выберите «Add > New Item». В списке элементов выберите «MVC View Start Page» и нажмите кнопку «Add».

Это добавит файл _ViewStart.cshtml со следующим исходным кодом:

@{
    Layout = "_Layout";
}

Он сообщает, что все представления будут иметь макет из файла _Layout.cshtml, который находится внутри общей папки.

4. Создание базы данных

На вашем компьютере должен быть установлен SQL Server 2017 (любой версии). Однако любой другой выпуск SQL Server, например 2016, 2008, 2012, будет работать. Вы можете использовать выпуски SQL Server 2017 для разработчиков и Express, которые можно использовать бесплатно - Загрузить SQL Server 2017.

Затем вам необходимо подключиться к SQL Server, что можно сделать с помощью обозревателя объектов SQL Server в Visual Studio. Поэтому выберите «View > SQL Server Object Explorer in Visual Studio» в Visual Studio.

Когда откроется окно «SQL Server Object Explorer», щелкните правой кнопкой мыши узел SQL Server и выберите Add SQL Server.

Затем открывается Connect окно. В этом окне выберите вкладку «Browse», затем щелкните узел «Local», чтобы открыть его.

Внутри этого узла выберите вторую опцию (localdb)\MSSQLLocalDB. Выбрав его, вы увидите, что поле «Server Name:» в том же окне теперь имеет значение (localdb)\MSSQLLocalDB.

Теперь вам нужно просто нажать кнопку Connect, чтобы подключиться к SQL Server. См. Изображение ниже:

Через несколько секунд SQL Server будет подключен и готов к использованию.

Затем щелкните правой кнопкой мыши Databases node и выберите Add New Database..

В диалоговом окне введите School в качестве имени базы данных и щелкните OK, чтобы создать базу данных.

База данных школы создана и пуста. Итак, теперь сначала создайте таблицу «Учитель».

Щелкните значок ► перед именем базы данных School, чтобы открыть различные узлы внутри нее.

Затем щелкните правой кнопкой мыши узел Tables и выберите Add New Table.

Table Design Window откроется в Visual Studio. Здесь вы можете добавить поля для таблицы Учителя.

В этом окне на вкладке T-SQL вы можете ввести приведенный ниже сценарий для создания таблицы «Teacher»:

CREATE TABLE [dbo].[Teacher]
(
    [Id] INT NOT NULL IDENTITY(1,1) PRIMARY KEY,
    [Name] VARCHAR(50) NOT NULL,
    [Skills] VARCHAR(250) NOT NULL,
    [TotalStudents] INT NOT NULL,
    [Salary] MONEY NOT NULL,
    [AddedOn] DATE NOT NULL DEFAULT GETDATE()
)

Затем вы нажимаете кнопку Update , чтобы начать процесс создания этой таблицы, см. Изображение ниже, которое объясняет это:

Вы получите новое диалоговое окно под названием «Preview Database Updates». Здесь нажмите кнопку «Update Database», и через несколько секунд будет создана инвентарная таблица.

Вы можете найти эту недавно созданную таблицу внутри узла «Таблицы».

Таблица «Учитель» состоит из 6 столбцов:

1. Id - столбец первичного ключа, который будет автоматически сгенерирован из 1, поскольку он имеет атрибут Identity (1,1).

2. Имя - столбец varchar (50) для хранения имени учителя.

3. Навыки - для запоминания навыков учителя.

4. TotalStudents - столбец Int для хранения общего количества студентов, которых преподает данный учитель.

5. Зарплата - для хранения зарплаты учителя.

6. AddedOn - для сохранения времени создания записи. Столбец имеет тип Date и автоматически получает текущее время с помощью функции SQL GETDATE ().

Обратите внимание, что столбцы имеют атрибут NOT NULL, поэтому они не могут содержать NULL.

5. Добавление строки подключения базы данных в приложение

Строка подключения хранит параметры в базе данных и используется для подключения к ней приложения. Эти параметры представляют собой имя драйвера, имя сервера и имя базы данных. Он также содержит информацию о безопасности, такую ​​как имя пользователя и пароль, необходимые для подключения к базе данных.

Строка подключения хранится в файле appsettings.json, который находится в корне приложения.

Щелкните правой кнопкой мыши имя проекта в обозревателе решений и выберите Add > New Item. Затем, когда откроется окно «Add New Item», выберите файл ASP.NET Configuration file и дайте ему имя как appsettings.json (см. Изображение ниже). Наконец, нажмите кнопку «Add».

Файл будет создан и открыт для редактирования в Visual Studio. Добавьте к нему следующую строку подключения:

{
    "ConnectionStrings": {
        "DefaultConnection": "Server=  (localdb)\\MSSQLLocalDB;Database=School;Trusted_Connection=True;MultipleActiveResultSets=true"
    }
}

Я определил доверенное соединение как истинное в строке соединения, поэтому учетные данные Windows текущего пользователя используются для аутентификации на сервере SQL.

6. Добавление модельного класса для учителя

Щелкните правой кнопкой мыши имя проекта в обозревателе решений и выберите «Add > New Folder». Назовите эту папку «Models». Затем щелкните правой кнопкой мыши эту папку «Models» и выберите «Add > New Item».

В открывшемся окне выберите новый класс и назовите его учителя. Добавьте к этому классу следующие свойства:

using CRUDADO.CustomValidation;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Threading.Tasks;
namespace CRUDADO.Models
{
    public class Teacher
    {
        [Required]
        public int Id { get; set; }
        [Required]
        public string Name { get; set; }
        [Required]
        [SkillsValidate(Allowed = new string[] { "ASP.NET Core", "ASP.NET MVC", "ASP.NET Web Forms" }, ErrorMessage = "You skills are invalid")]
        public string Skills { get; set; }
        [Range(5, 50)]
        public int TotalStudents { get; set; }
        [Required]
        public decimal Salary { get; set; }
   
        [Required]
        public DateTime AddedOn { get; set; }
    }
}

У этого класса есть 6 свойств для 6 столбцов в таблице Teacher в базе данных. Я применил атрибуты [Required] к свойствам Id, Name, Skills, Salary и AddedOn, свойство TotalStudent применяется с атрибутом [Range], поэтому допускаются только значения от 5 до 50.

Также обратите внимание на атрибут [SkillsValidate], примененный к свойству Skills. Атрибут [SkillsValidate] - это настраиваемый атрибут проверки, с помощью которого я заставлю свойство Skills принимать только 3 значения:

1. ASP.NET Core

2. ASP.NET MVC

3. Веб-формы ASP.NET

Затем я создам настраиваемый атрибут проверки [SkillsValidate]. Итак, создайте новую папку в корне приложения и назовите ее «CustomValidation». Внутри этой папки добавьте новый класс с именем «SkillsValidate.cs» и добавьте к нему следующий код:

using Microsoft.AspNetCore.Mvc.ModelBinding.Validation;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace CRUDADO.CustomValidation
{
    public class SkillsValidate : Attribute, IModelValidator
    {
        public string[] Allowed { get; set; }
        public string ErrorMessage { get; set; }
    
        public IEnumerable<ModelValidationResult> Validate(ModelValidationContext context)
        {
            if (Allowed.Contains(context.Model as string))
                return Enumerable.Empty<ModelValidationResult>();
            else
                return new List<ModelValidationResult> {
                    new ModelValidationResult("", ErrorMessage)
                };
        }
    }
}

7. Добавление функции проверки на стороне клиента

Функция проверки на стороне клиента выполняется «jQuery» и двумя подключаемыми модулями проверки, а именно:

1. Проверка jQuery

2. Ненавязчивая проверка jQuery

Чтобы установить эти 3, выполните следующие команды в окне «Package Manager Console»:

PM> Install-Package jQuery -Version 3.3.1
PM> Install-Package jQuery.Validation -Version 1.17.0
PM> Install-Package jQuery.Validation.Unobtrusive -Version 2.0.20710

8. Выполнение функции CREATE Teacher

Создайте папку «Controllers» в корне приложения. Внутри этой папки добавьте новый контроллер с именем ‘HomeController.cs’. У контроллера будет начальный код, как показано ниже:

using System.Collections.Generic;
using System.Linq;
using Microsoft.AspNetCore.Mvc;
namespace CRUDADO.Controllers
{
    public class HomeController : Controller
    {
        public IActionResult Index()
        {
            return View();
        }
    }
}

Строка подключения хранится в файле appsettings.json. Чтобы получить доступ к этому файлу, мне нужно получить объект интерфейса IConfiguration с помощью функции внедрения зависимостей. Поэтому мне нужно добавить IConfiguration интерфейс в конструктор HomeController, и инфраструктура MVC автоматически предоставит мне объект для него.

Так что измените код домашнего контроллера, как показано ниже:

using System.Collections.Generic;
using System.Linq;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Configuration;
namespace CRUDADO.Controllers
{
    public class HomeController : Controller
    {
        public IConfiguration Configuration { get; }
        public HomeController(IConfiguration configuration)
        {
            Configuration = configuration;
        }
    
        public IActionResult Index()
        {
            return View();
        }
    }
}

Функциональность CREATE Teacher реализована с помощью нового метода действия под названием «CREATE». Поэтому добавьте методы Create Action в Home Controller, как показано ниже:

using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Threading.Tasks;
using CRUDADO.Models;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Configuration;
namespace CRUDADO.Controllers
{ 
    public class HomeController : Controller
    {
        public IConfiguration Configuration { get; }
        public HomeController(IConfiguration configuration)
        {
            Configuration = configuration;
        }
        public IActionResult Index()
        {
            return View();
        }
        public IActionResult Create()
        {
            return View();
        }
        [HttpPost]
        public IActionResult Create_Post(Teacher teacher)
        {
            if (ModelState.IsValid)
            {
                string connectionString = Configuration["ConnectionStrings:DefaultConnection"];
                using (SqlConnection connection = new SqlConnection(connectionString))
                {
                    string sql = $"Insert Into Teacher (Name, Skills, TotalStudents, Salary) Values ('{teacher.Name}', '{teacher.Skills}','{teacher.TotalStudents}','{teacher.Salary}')";
                    using (SqlCommand command = new SqlCommand(sql, connection))
                    {
                        command.CommandType = CommandType.Text;
                        connection.Open();
                        command.ExecuteNonQuery();
                        connection.Close();
                    }
                    return RedirectToAction("Index");
                }
            }
            else
                return View();
        }
    }
}

В методе Create Action я получил строку подключения в следующей строке кода:

string connectionString = Configuration["ConnectionStrings:DefaultConnection"];

Затем я использовал объект ‘SqlCommand’, чтобы вставить записи учителя, выполнив вставку SQL-запроса:

string sql = $"Insert Into Teacher (Name, Skills, TotalStudents, Salary) Values ('{teacher.Name}', '{teacher.Skills}','{teacher.TotalStudents}','{teacher.Salary}')";

Затем добавьте папку «Views» в корень приложения. Внутри этой папки создайте новую папку под названием «Home».

Затем создайте новое представление с именем «Create.cshtml» внутри этой папки «Home» (т. Е. «Views>Home»). Добавьте в это представление следующий код:

@model Teacher
@{
    Layout = "_Layout";
    var title = "CREATE Teacher";
    ViewData["Title"] = title;
}
<style>
.input-validation-error {
    border-color: red;
}
</style>
<h2>@title</h2>
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
<form class="m-1 p-1" method="post">
    <div class="form-group">
        <label asp-for="Name"></label>
        <input asp-for="Name" class="form-control" />
        <span asp-validation-for="Name" class="text-danger"></span>
    </div>
    <div class="form-group">
        <label asp-for="Skills"></label>
        <input asp-for="Skills" type="text" class="form-control" />
        <span asp-validation-for="Skills" class="text-danger"></span>
    </div>
    <div class="form-group">
        <label asp-for="TotalStudents"></label>
        <input asp-for="TotalStudents" type="text" class="form-control" />
        <span asp-validation-for="TotalStudents" class="text-danger"></span>
    </div>
    <div class="form-group">
        <label asp-for="Salary"></label>
        <input asp-for="Salary" type="text" class="form-control" />
        <span asp-validation-for="Salary" class="text-danger"></span>
    </div>
    <button type="submit" class="btn btn-primary">Submit</button></form>
<script src="/lib/jquery/dist/jquery.min.js"></script>
<script src="/lib/jquery-validation/dist/jquery.validate.min.js"></script>
<script src="/lib/jquery-validation-unobtrusive/dist/jquery.validate.unobtrusive.min.js"></script>

Представление имеет модель типа «Teacher» и создает поля ввода для «Name, Skills, TotalStudents and Salary», чтобы пользователь мог заполнить и отправить его.

При нажатии кнопки «Отправить» вызывается действие «Создать» типа HttpPost и создаются новые записи учителя.

Обратите внимание на 3 файла сценария, которые выполняют проверку на стороне клиента полей ввода в представлении:

<script src="/lib/jquery/dist/jquery.min.js"></script>
<script src="/lib/jquery-validation/dist/jquery.validate.min.js"></script>
<script src="/lib/jquery-validation-unobtrusive/dist/jquery.validate.unobtrusive.min.js"></script>

Если вы выполняете вставку записей через ядро ​​EF, вам необходимо ознакомиться с этим руководством - Вставить записи в ядро ​​Entity Framework.

Тестирование функции "Создать учителя"

Запустите приложение и в браузере перейдите по URL-адресу представления «Create», то есть - http://localhost:52730/Home/Create. В браузере вы увидите форму «Создать учителя».

Не заполняя никаких полей, нажмите кнопку «Отправить», и вы увидите ошибки проверки, отображаемые плагинами проверки jQuery.

Теперь заполните все поля (как показано на изображении ниже) и нажмите кнопку отправки.

Запись учителя будет создана в базе данных, и вы будете перенаправлены в индексный просмотр, который в настоящее время пуст.

Вы можете подтвердить, что запись вставлена ​​в таблицу Учителя. Для этого перейдите к «SQL Server Object Explorer», затем щелкните правой кнопкой мыши таблицу «Teacher» и выберите «View Data».

Откроется таблица учителя, в которой вы увидите новую запись учителя, см. Изображение ниже:

9. Выполнение функции READ Teacher

Теперь мы создадим функциональность READ Teacher. Поэтому измените действие индекса в домашнем контроллере, чтобы вернуть всех учителей в представление, как показано ниже:

public IActionResult Index()
{
    List<Teacher> teacherList = new List<Teacher>();
    string connectionString = Configuration["ConnectionStrings:DefaultConnection"];
    using (SqlConnection connection = new SqlConnection(connectionString))
    {
        //SqlDataReader
        connection.Open();
        
        string sql = "Select * From Teacher";SqlCommand command = new SqlCommand(sql, connection);
        using (SqlDataReader dataReader = command.ExecuteReader())
        {
            while (dataReader.Read())
            {
                Teacher teacher = new Teacher();
                teacher.Id = Convert.ToInt32(dataReader["Id"]);
                teacher.Name = Convert.ToString(dataReader["Name"]);
                teacher.Skills = Convert.ToString(dataReader["Skills"]);
                teacher.TotalStudents = Convert.ToInt32(dataReader["TotalStudents"]);
                teacher.Salary = Convert.ToDecimal(dataReader["Salary"]);
                teacher.AddedOn = Convert.ToDateTime(dataReader["AddedOn"]);
                teacherList.Add(teacher);
            }
        }
        connection.Close();
    }
    return View(teacherList);
}

В этом действии я выполняю запрос «Select * from Teacher» с помощью метода SqlCommand’s ExecuteReader(), чтобы получить объект SqlDataReader.

Затем я просматриваю все записи, используя метод «.Read()» SqlDataReader, и создаю объект списка учителей, который содержит все записи учителя. Этот объект возвращается в представление как модель в самом конце кода.

Затем добавьте представление «Index» в папку «Views/Home/» со следующим кодом:

@model IEnumerable<Teacher>
@{
    Layout = "_Layout";
    var title = "READ Teacher";
    ViewData["Title"] = title;
}
<h2>@title</h2>
<h3><a asp-action="Create" class="btn btn-sm btn-secondary">Create</a></h3>
<table class="table table-bordered table-sm table-striped">
    <thead>
        <tr>
            <th>Id</th>
            <th>Name</th>
            <th>Skills</th>
            <th>Total Students</th>
            <th>Salary</th>
            <th>Added On</th>
            <th>Update</th>
            <th>Delete</th>
        </tr>
    </thead>
    <tbody>
        @if (Model == null)
        {
            <tr>
                <td colspan="7" class="text-center">No Model Data</td>
            </tr>
        }
        else
        {
            @foreach (var p in Model)
            {
                <tr>
                    <td>@p.Id</td>
                    <td>@p.Name</td>
                    <td>@p.Skills</td>
                    <td>@p.TotalStudents</td>
                    <td>@string.Format(new System.Globalization.CultureInfo("en-US"), "{0:C2}", p.Salary)</td>
                    <td>@string.Format("{0:dddd, dd MMMM yyyy}", p.AddedOn)</td>
                    <td><a asp-action="Update" asp-route-id="@p.Id">Update</a></td>
                    <td>
                        <form asp-action="Delete" method="post" asp-route-id="@p.Id">
                            <button>Delete</button>
                        </form>
                    </td>
                </tr>
            }
        }
    </tbody>
</table>

Обратите внимание, что я также создал столбцы для функций обновления и удаления в элементах thead и tbody таблицы:

<table class="table table-bordered table-sm table-striped">
    <thead>
        <tr>
            <th>Id</th>
            <th>Name</th>
            <th>Skills</th>
            <th>Total Students</th>
            <th>Salary</th>
            <th>Added On</th>
            <th>Update</th>
            <th>Delete</th>
        </tr>
    </thead>
    <tbody>
    …
    else
    {
        @foreach (var p in Model)
        {
            <tr>
            …
                <td><a asp-action="Update" asp-route-id="@p.Id">Update</a></td>
                <td>
                    <form asp-action="Delete" method="post" asp-route-id="@p.Id">
                        <button>Delete</button>
                    </form>
                </td>
            </tr>
        }
    }
    </tbody>
</table>

Мы создадим функциональные возможности обновления и удаления в следующих разделах.

Связанное руководство, которое вы не можете пропустить - Чтение записей в Entity Framework Core.

Тестирование функции Read Teacher

Запустите приложение, и вы увидите, что записи таблицы Учителя отображаются в режиме указателя. Это показано на изображении ниже:

10. Выполнение функции UPDATE Teacher

Функциональность обновления выполняется путем добавления методов действия обновления в домашний контроллер. Коды для добавления в контроллер приведены ниже:

public IActionResult Update(int id)
{
    string connectionString = Configuration["ConnectionStrings:DefaultConnection"];
    Teacher teacher = new Teacher();
    using (SqlConnection connection = new SqlConnection(connectionString))
    {
        string sql = $"Select * From Teacher Where Id='{id}'";
        SqlCommand command = new SqlCommand(sql, connection);
        connection.Open();
        using (SqlDataReader dataReader = command.ExecuteReader())
        {
            while (dataReader.Read())
            {
                teacher.Id = Convert.ToInt32(dataReader["Id"]);
                teacher.Name = Convert.ToString(dataReader["Name"]);
                teacher.Skills = Convert.ToString(dataReader["Skills"]);
                teacher.TotalStudents = Convert.ToInt32(dataReader["TotalStudents"]);
                teacher.Salary = Convert.ToDecimal(dataReader["Salary"]);
                teacher.AddedOn = Convert.ToDateTime(dataReader["AddedOn"]);
            }
        }
        connection.Close();
    }
    return View(teacher);
}
[HttpPost]
[ActionName("Update")]
public IActionResult Update_Post(Teacher teacher)
{
    string connectionString = Configuration["ConnectionStrings:DefaultConnection"];
    using (SqlConnection connection = new SqlConnection(connectionString))
    {
        string sql = $"Update Teacher SET Name='{teacher.Name}', Skills='{teacher.Skills}', TotalStudents='{teacher.TotalStudents}', Salary='{teacher.Salary}' Where Id='{teacher.Id}'";
        using (SqlCommand command = new SqlCommand(sql, connection))
        {
            connection.Open();
            command.ExecuteNonQuery();
            connection.Close();
        }
    }
    return RedirectToAction("Index");
}

HttpGet version метода действия Update принимает в параметре «id» учителя, а затем запускает SQL-запрос с именем Select * From Teacher Where Id='{id}' с объектом SqlCommand. Он получает значение записи учителя и возвращает его в представление обновления.

Версия HttpPost метода Update Action выполняет фактическое обновление записи учителя с помощью объекта ADO.NET «SqlCommand». Важно отметить, что запрос на обновление:

string sql = $"Update Teacher SET Name='{teacher.Name}', Skills='{teacher.Skills}', TotalStudents='{teacher.TotalStudents}', Salary='{teacher.Salary}' Where Id='{teacher.Id}'";

Затем создайте представление обновления внутри папки «Views / Home /» со следующим кодом:

@model Teacher
@{
    Layout = "_Layout";
    var title = "UPDATE Teacher";
    ViewData["Title"] = title;
}
<style>
    .input-validation-error {
        border-color: red;
    }
</style>
<h2>@title</h2>
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
<form class="m-1 p-1" method="post">
    <div class="form-group">
        <label asp-for="Id"></label>
        <input asp-for="Id" type="text" readonly class="form-control" />
    </div
    <div class="form-group">
        <label asp-for="Name"></label>
        <input asp-for="Name" type="text" class="form-control" />
        <span asp-validation-for="Name" class="text-danger"></span>
    </div>
    <div class="form-group">
        <label asp-for="Skills"></label>
        <input asp-for="Skills" type="text" class="form-control" />
        <span asp-validation-for="Skills" class="text-danger"></span>
    </div>
    <div class="form-group">
        <label asp-for="TotalStudents"></label>
        <input asp-for="TotalStudents" type="text" class="form-control" />
        <span asp-validation-for="TotalStudents" class="text-danger"></span>
    </div>
    <div class="form-group">
        <label asp-for="Salary"></label>
        <input asp-for="Salary" type="text" class="form-control"/>
        <span asp-validation-for="Salary" class="text-danger"></span>
    </div>
    <div class="form-group">
        <label asp-for="AddedOn"></label>
        <input asp-for="AddedOn" type="text" class="form-control" asp-format="{0:d}" />
    </div>
    <button type="submit" class="btn btn-primary">Submit</button>
</form>
<script src="/lib/jquery/dist/jquery.min.js"></script>
<script src="/lib/jquery-validation/dist/jquery.validate.min.js"></script><script src="/lib/jquery-validation-unobtrusive/dist/jquery.validate.unobtrusive.min.js"></script>

Представление похоже на представление индекса, которое мы создали ранее. Я сделал поле «Id» доступным только для чтения, чтобы пользователь не мог его изменить.

Тестирование функций Update Teacher

Запустите приложение и нажмите ссылку «Обновить» для записей 1-го учителя, см. Изображение ниже:

Запись откроется для обновления. Измените имя на «Bill Gates» и зарплату на «100000000». Наконец, нажмите кнопку отправки, как показано на изображении ниже:

Запись будет обновлена, и вы будете перенаправлены в представление индекса, где вы увидите обновленные поля записи, как показано на изображении ниже:

11. Выполнение функции DELETE Teacher

Создайте метод Delete Action в Home Controller, код которого приведен ниже:

HttpPost]
public IActionResult Delete(int id)
{
    string connectionString = Configuration["ConnectionStrings:DefaultConnection"]
    using (SqlConnection connection = new SqlConnection(connectionString))
    {
        string sql = $"Delete From Teacher Where Id='{id}'";
        using (SqlCommand command = new SqlCommand(sql, connection))
        {
            connection.Open();
            try
            {
                command.ExecuteNonQuery();
            }
            catch (SqlException ex)
            {
                ViewBag.Result = "Operation got error:" + ex.Message;
            }
            connection.Close();
        }
    }
    return RedirectToAction("Index");
}

Этот метод принимает в качестве параметра идентификатор записи учителя, а затем выполняет запрос Delete SQL:

string sql = $"Delete From Teacher Where Id='{id}'";

Тестирование функции удаления учителя

Запустите приложение и щелкните ссылку «Удалить» напротив любой записи. Проверьте изображения ниже, на которых показан процесс удаления записи:

Загрузите полный исходный код этого приложения с GitHub
________________________________________________________

Заключение

На этом руководство по операциям CRUD в ASP.NET Core с использованием ADO.NET завершено. Надеюсь, вам понравилось это читать и вы понимаете, как работают коды. Если у вас возникла путаница, просмотрите весь код, который вы можете скачать отсюда.

Я надеюсь, что в этом руководстве вы нашли что-то новое, что можно добавить к своим знаниям в области веб-разработки.

Если это так, не забудьте пару раз хлопнуть в ладоши, чтобы показать, что вам нравится. Это не только вызовет улыбку на моем плохом лице, но и побудит меня писать все больше и больше хороших статей для веб-разработчиков.

И, как всегда, подписывайтесь на меня, чтобы получать уведомления, когда я публикую новую статью на Medium.

Я также опубликовал еще одно руководство по HACKERNOON, вы тоже хотели бы его увидеть - 7 общих проблем веб-разработки, которые должен знать каждый разработчик, от новичков до экспертов [с несколькими решениями]