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

Ради краткости в большинстве методов класса InventoryDal не будут применяться блоки try/catch для обработки возможных исключений, равно как не будут генерироваться специальные исключения для сообщения о разнообразных проблемах при выполнении (скажем, неправильно сформированная строка подключения). Если бы строилась библиотека доступа к данным производственного уровня, то определенно пришлось бы использовать приемы структурированной обработки исключений (как объяснялось в главе 7), чтобы учесть любые аномалии времени выполнения.

Добавление реализации IDisposable

Добавьте к определению класса интерфейс IDisposable:


public class InventoryDal : IDisposable

{

  ...

}


Затем реализуйте шаблон освобождения, вызывая Dispose на объекте SqlConnection:


bool _disposed = false;

protected virtual void Dispose(bool disposing)

{

  if (_disposed)

  {

    return;

  }

  if (disposing)

  {

    _sqlConnection.Dispose;

  }

  _disposed = true;

}


public void Dispose

{

  Dispose(true);

  GC.SuppressFinalize(this);

}

Добавление методов выборки

Для начала объедините имеющиеся сведения об объектах команд, чтения данных и обобщенных коллекциях, чтобы получить записи из таблицы Inventory. Как было показано в начале главы, объект чтения данных в поставщике делает возможной выборку записей с использованием механизма, который реализует только чтение в прямом направлении с помощью метода Read. В этом примере свойство CommandBehavior класса DataReader настроено на автоматическое закрытие подключения, когда закрывается объект чтения данных. Метод GetAllInventory возвращает экземпляр List, представляющий все данные в таблице Inventory:


public List GetAllInventory

{

  OpenConnection;

  // Здесь будут храниться записи.

  List inventory = new List;


  // Подготовить объект команды.

  string sql =

    @"SELECT i.Id, i.Color, i.PetName,m.Name as Make

          FROM Inventory i

          INNER JOIN Makes m on m.Id = i.MakeId";

  using SqlCommand command =

    new SqlCommand(sql, _sqlConnection)

    {

      CommandType = CommandType.Text

    };

  command.CommandType = CommandType.Text;

  SqlDataReader dataReader =

    command.ExecuteReader(CommandBehavior.CloseConnection);

  while (dataReader.Read)

  {

    inventory.Add(new CarViewModel

    {

      Id = (int)dataReader["Id"],

      Color = (string)dataReader["Color"],

      Make = (string)dataReader["Make"],

      PetName = (string)dataReader["PetName"]

    });

  }

  dataReader.Close;

  return inventory;

}


Следующий метод выборки получает одиночный объект CarViewModel на основе значения CarId:


public CarViewModel GetCar(int id)

{

  OpenConnection;

  CarViewModel car = null;

  // Параметры должны применяться по причинам, связанным с безопасностью.

  string sql =

   $@"SELECT i.Id, i.Color, i.PetName,m.Name as Make

          FROM Inventory i

          INNER JOIN Makes m on m.Id = i.MakeId

          WHERE i.Id = {id}";

  using SqlCommand command =

    new SqlCommand(sql, _sqlConnection)

    {

      CommandType = CommandType.Text

    };

  SqlDataReader dataReader =

    command.ExecuteReader(CommandBehavior.CloseConnection);

  while (dataReader.Read)

  {

    car = new CarViewModel

    {

      Id = (int) dataReader["Id"],

      Color = (string) dataReader["Color"],

      Make = (string) dataReader["Make"],

      PetName = (string) dataReader["PetName"]

    };

  }

  dataReader.Close;

  return car;

}


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

Похожие книги

Программирование. Принципы и практика использования C++ Исправленное издание
Программирование. Принципы и практика использования C++ Исправленное издание

Специальное издание самой читаемой и содержащей наиболее достоверные сведения книги по C++. Книга написана Бьярне Страуструпом — автором языка программирования C++ — и является каноническим изложением возможностей этого языка. Помимо подробного описания собственно языка, на страницах книги вы найдете доказавшие свою эффективность подходы к решению разнообразных задач проектирования и программирования. Многочисленные примеры демонстрируют как хороший стиль программирования на С-совместимом ядре C++, так и современный -ориентированный подход к созданию программных продуктов. Третье издание бестселлера было существенно переработано автором. Результатом этой переработки стала большая доступность книги для новичков. В то же время, текст обогатился сведениями и методиками программирования, которые могут оказаться полезными даже для многоопытных специалистов по C++. Не обойдены вниманием и нововведения языка: стандартная библиотека шаблонов (STL), пространства имен (namespaces), механизм идентификации типов во время выполнения (RTTI), явные приведения типов (cast-операторы) и другие. Настоящее специальное издание отличается от третьего добавлением двух новых приложений (посвященных локализации и безопасной обработке исключений средствами стандартной библиотеки), довольно многочисленными уточнениями в остальном тексте, а также исправлением множества опечаток. Книга адресована программистам, использующим в своей повседневной работе C++. Она также будет полезна преподавателям, студентам и всем, кто хочет ознакомиться с описанием языка «из первых рук».

Бьёрн Страуструп , Ирина Сергеевна Козлова , Бьерн Страуструп , Валерий Федорович Альмухаметов

Программирование, программы, базы данных / Базы данных / Программирование / Учебная и научная литература / Образование и наука / Книги по IT
97 этюдов для архитекторов программных систем
97 этюдов для архитекторов программных систем

Успешная карьера архитектора программного обеспечения требует хорошего владения как технической, так и деловой сторонами вопросов, связанных с проектированием архитектуры. В этой необычной книге ведущие архитекторы ПО со всего света обсуждают важные принципы разработки, выходящие далеко за пределы чисто технических вопросов.?Архитектор ПО выполняет роль посредника между командой разработчиков и бизнес-руководством компании, поэтому чтобы добиться успеха в этой профессии, необходимо не только овладеть различными технологиями, но и обеспечить работу над проектом в соответствии с бизнес-целями. В книге более 50 архитекторов рассказывают о том, что считают самым важным в своей работе, дают советы, как организовать общение с другими участниками проекта, как снизить сложность архитектуры, как оказывать поддержку разработчикам. Они щедро делятся множеством полезных идей и приемов, которые вынесли из своего многолетнего опыта. Авторы надеются, что книга станет источником вдохновения и руководством к действию для многих профессиональных программистов.

Нил Форд , Билл де Ора , Майкл Хайгард

Программирование, программы, базы данных / Базы данных / Программирование / Книги по IT