» » » » Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю

Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю

На нашем литературном портале можно бесплатно читать книгу Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю, Троелсен Эндрю . Жанр: Базы данных. Онлайн библиотека дает возможность прочитать весь текст и даже без регистрации и СМС подтверждения на нашем литературном портале litmir.org.
Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю
Название: Язык программирования C#9 и платформа .NET5
Дата добавления: 22 август 2024
Количество просмотров: 234
Читать онлайн

Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних просмотр данного контента СТРОГО ЗАПРЕЩЕН! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту readbookfedya@gmail.com для удаления материала

Язык программирования C#9 и платформа .NET5 читать книгу онлайн

Язык программирования C#9 и платформа .NET5 - читать бесплатно онлайн , автор Троелсен Эндрю

В 10-м издании книги описаны новейшие возможности языка C# 9 и .NET 5 вместе с подробным "закулисным" обсуждением, призванным расширить навыки критического мышления разработчиков, когда речь идет об их ремесле.

Книга охватывает ASP.NET Core, Entity Framework Core и многое другое наряду с последними обновлениями унифицированной платформы .NET, начиная с улучшений показателей производительности настольных приложений Windows в .NET 5 и обновления инструментария XAML и заканчивая расширенным рассмотрением файлов данных и способов обработки данных.

Все примеры кода были переписаны с учетом возможностей последнего выпуска C# 9.

Перейти на страницу:

    Direction = ParameterDirection.Input

  };

  cmdInsert.Parameters.Add(parameterId2);

  cmdInsert.Parameters.Add(parameterFirstName);

  cmdInsert.Parameters.Add(parameterLastName);

  // Это будет получено из объекта подключения.

  SqlTransaction tx = null;

  try

  {

    tx = _sqlConnection.BeginTransaction();

    // Включить команды в транзакцию.

    cmdInsert.Transaction = tx;

    cmdUpdate.Transaction = tx;

    // Выполнить команды.

    cmdInsert.ExecuteNonQuery();

    cmdUpdate.ExecuteNonQuery();

    // Эмулировать ошибку.

    if (throwEx)

    {

      throw new Exception("Sorry!  Database error! Tx failed...");

      // Возникла ошибка, связанная с базой данных! Отказ транзакции...

    }

    // Зафиксировать транзакцию!

    tx.Commit();

  }

  catch (Exception ex)

  {

    Console.WriteLine(ex.Message);

    // Любая ошибка приведет к откату транзакции.

    // Использовать условную операцию для проверки на предмет null.

    tx?.Rollback();

  }

  finally

  {

    CloseConnection();

  }

}

Здесь используется входной параметр типа bool, который указывает, нужно ли генерировать произвольное исключение при попытке обработки проблемного клиента. Такой прием позволяет эмулировать непредвиденные обстоятельства, которые могут привести к неудачному завершению транзакции. Понятно, что это делается лишь в демонстрационных целях; настоящий метод транзакции не должен позволять вызывающему процессу нарушать работу логики по своему усмотрению!

Обратите внимание на применение двух объектов SqlCommand для представления каждого шага транзакции, которая будет запущена. После получения имени и фамилии клиента на основе входного параметра customerID с помощью метода BeginTransaction() объекта подключения можно получить допустимый объект SqlTransaction. Затем (что очень важно) потребуется привлечь к участию каждый объект команды, присвоив его свойству Transaction полученного объекта транзакции. Если этого не сделать, то логика вставки и обновления не будет находиться в транзакционном контексте.

После вызова метода ExecuteNonQuery() на каждой команде генерируется исключение, если (и только если) значение параметра bool равно true. В таком случае происходит откат всех ожидающих операций базы данных. Если исключение не было сгенерировано, тогда в результате вызова Commit() оба шага будут зафиксированы в таблицах базы данных.

(window.adrunTag = window.adrunTag || []).push({v: 1, el: 'adrun-4-390', c: 4, b: 390})

Тестирование транзакции базы данных

Выберите одного из клиентов, добавленных в таблицу Customers (например, Dave Benner, Id = 1). Добавьте в Program.cs внутри проекта AutoLot.Client новый метод по имени FlagCustomer():

void FlagCustomer()

{

  Console.WriteLine("***** Simple Transaction Example *****n");

  // Простой способ позволить транзакции успешно завершиться или отказать.

  bool throwEx = true;

  Console.Write("Do you want to throw an exception (Y or N): ");

              // Хотите ли вы сгенерировать исключение?

  var userAnswer = Console.ReadLine();

   if (string.IsNullOrEmpty(userAnswer) ||

       userAnswer.Equals("N",StringComparison.OrdinalIgnoreCase))

  {

    throwEx = false;

  }

  var dal = new InventoryDal();

  // Обработать клиента 1 - ввести идентификатор клиента,

  // подлежащего перемещению.

  dal.ProcessCreditRisk(throwEx, 1);

  Console.WriteLine("Check CreditRisk table for results");

                  // Результаты ищите в таблице CreditRisk

  Console.ReadLine();

}

Если вы запустите программу и укажете на необходимость генерации исключения, то обнаружите, что фамилия клиента в таблице Customers не изменилась, т.к. произошел откат всей транзакции. Однако если исключение не генерировалось, тогда окажется, что фамилия клиента в таблице Customers изменилась и была добавлена в таблицу CreditRisks.

Выполнение массового копирования с помощью ADO.NET

В случае, когда необходимо загрузить много записей в базу данных, показанные до сих пор методы будут довольно неэффективными. В SQL Server имеется средство, называемое массовым копированием, которое предназначено специально для таких сценариев, и в ADO.NET для него предусмотрена оболочка в виде класса SqlBulkCopy. В настоящем разделе главы объясняется, как выполнять массовое копирование с помощью ADO.NET.

Перейти на страницу:
Комментариев (0)