Чтение онлайн

ЖАНРЫ

Язык программирования C#9 и платформа .NET5
Шрифт:

carPetName = (string)command.Parameters["@petName"].Value;

К настоящему моменту вы располагаете простейшей библиотекой доступа к данным, которую можно задействовать при построении клиента для отображения и редактирования данных. Вопросы создания графических пользовательских интерфейсов пока не обсуждались, поэтому мы протестируем полученную библиотеку доступа к данным с помощью нового консольного приложения.

Создание консольного клиентского приложения

Добавьте к решению

AutoLot.Dal
новый проект консольного
приложения (по имени
AutoLot.Client
) и ссылку на проект
AutoLot.Dal
. Ниже приведены соответствующие CLI-команды
dotnet
(предполагается, что ваше решение называется
Chapter21_А11Projects.sin
):

dotnet new console -lang c# -n AutoLot.Client -o .\AutoLot.Client -f net5.0

dotnet sln .\Chapter21_AllProjects.sln add .\AutoLot.Client

dotnet add AutoLot.Client package Microsoft.Data.SqlClient

dotnet add AutoLot.Client reference AutoLot.Dal

В случае использования Visual Studio щелкните правой кнопкой мыши на имени решения и выберите в контекстном меню пункт Add?New Project (Добавить?Новый проект). Установите новый проект в качестве стартового (щелкнув правой кнопкой мыши на имени проекта в окне Solution Explorer и выбрав в контекстном меню пункт Set as Startup Project (Установить как стартовый проект)). Это обеспечит запуск нового проекта при инициировании отладки в Visual Studio. Если вы применяете Visual Studio Code, тогда перейдите в каталог

AutoLot.Test
и запустите проект (когда наступит время) с использованием
dotnet run
.

Очистите код, сгенерированный в

Program.cs
, и поместите в начало файла
Program.cs
следующие операторы
using
:

using System;

using System.Linq;

using AutoLot.Dal;

using AutoLot.Dal.Models;

using AutoLot.Dal.DataOperations;

using System.Collections.Generic;

Чтобы задействовать

AutoLot.Dal
, замените код метода
Main
показанным далее кодом:

InventoryDal dal = new InventoryDal;

List<CarViewModel> list = dal.GetAllInventory;

Console.WriteLine(" ************** All Cars ************** ");

Console.WriteLine("Id\tMake\tColor\tPet Name");

foreach (var itm in list)

{

Console.WriteLine($"{itm.Id}\t{itm.Make}\t{itm.Color}\t{itm.PetName}");

}

Console.WriteLine;

CarViewModel car =

dal.GetCar(list.OrderBy(x=>x.Color).Select(x => x.Id).First);

Console.WriteLine(" ************** First Car By Color ************** ");

Console.WriteLine("CarId\tMake\tColor\tPet Name");

Console.WriteLine($"{car.Id}\t{car.Make}\t{car.Color}\t{car.PetName}");

try

{

//
Это потерпит неудачу из-за наличия связанных данных в таблице Orders.

dal.DeleteCar(5);

Console.WriteLine("Car deleted."); // Запись об автомобиле удалена.

}

catch (Exception ex)

{

Console.WriteLine($"An exception occurred: {ex.Message}");

// Сгенерировано исключение

}

dal.InsertAuto(new Car { Color = "Blue", MakeId = 5, PetName = "TowMonster" });

list = dal.GetAllInventory;

var newCar = list.First(x => x.PetName == "TowMonster");

Console.WriteLine(" ************** New Car ************** ");

Console.WriteLine("CarId\tMake\tColor\tPet Name");

Console.WriteLine($"{newCar.Id}\t{newCar.Make}\t{newCar.Color}\t{newCar.PetName}");

dal.DeleteCar(newCar.Id);

var petName = dal.LookUpPetName(car.Id);

Console.WriteLine(" ************** New Car ************** ");

Console.WriteLine($"Car pet name: {petName}");

Console.Write("Press enter to continue...");

Console.ReadLine;

Понятие транзакций базы данных

Давайте завершим исследование ADO.NET рассмотрением концепции транзакций базы данных. Выражаясь просто, транзакция — это набор операций базы данных, которые успешно выполняются или терпят неудачу как единая группа. Если одна из операций отказывает, тогда осуществляется откат всех остальных операций, как будто ничего не происходило. Несложно предположить, что транзакции по-настоящему важны для обеспечения безопасности, достоверности и согласованности табличных данных.

Транзакции также важны в ситуациях, когда операция базы данных включает в себя взаимодействие с множеством таблиц или хранимых процедур (либо с комбинацией атомарных элементов базы данных). Классическим примером транзакции может служить процесс перевода денежных средств с одного банковского счета на другой. Например, если вам понадобилось перевести $500 с депозитного счета на текущий чековый счет, то следующие шаги должны быть выполнены в транзакционной манере.

1. Банк должен снять $500 с вашего депозитного счета.

2. Банк должен добавить $500 на ваш текущий чековый счет.

Вряд ли бы вам понравилось, если бы деньги были сняты с депозитного счета, но не переведены (из-за какой-то ошибки со стороны банка) на текущий чековый счет, потому что вы попросту лишились бы $500. Однако если поместить указанные шаги внутрь транзакции базы данных, тогда СУБД гарантирует, что все взаимосвязанные шаги будут выполнены как единое целое. Если любая часть транзакции откажет, то будет произведен откат всей операции в исходное состояние. С другой стороны, если все шаги выполняются успешно, то транзакция будет зафиксирована.

Поделиться с друзьями: