Симон Робинсон - C# для профессионалов. Том II

Тут можно читать онлайн Симон Робинсон - C# для профессионалов. Том II - бесплатно полную версию книги (целиком) без сокращений. Жанр: comp-programming, издательство Лори, год 2003. Здесь Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте лучшей интернет библиотеки ЛибКинг или прочесть краткое содержание (суть), предисловие и аннотацию. Так же сможете купить и скачать торрент в электронном формате fb2, найти и слушать аудиокнигу на русском языке или узнать сколько частей в серии и всего страниц в публикации. Читателям доступно смотреть обложку, картинки, описание и отзывы (комментарии) о произведении.
  • Название:
    C# для профессионалов. Том II
  • Автор:
  • Жанр:
  • Издательство:
    Лори
  • Год:
    2003
  • Город:
    Москва
  • ISBN:
    5-85582-187-0
  • Рейтинг:
    4.88/5. Голосов: 81
  • Избранное:
    Добавить в избранное
  • Отзывы:
  • Ваша оценка:
    • 100
    • 1
    • 2
    • 3
    • 4
    • 5

Симон Робинсон - C# для профессионалов. Том II краткое содержание

C# для профессионалов. Том II - описание и краткое содержание, автор Симон Робинсон, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru
C# для профессионалов

Платформа .NET предлагает новую среду, в которой можно разрабатывать практически любое приложение, действующее под управлением Windows, а язык C# — новый язык программирования, созданный специально для работы с .NET.

В этой книге представлены все основные концепции языка C# и платформы .NET. Полностью описывается синтаксис C#, приводятся примеры построения различных типов приложений с использованием C# — создание приложений и служб Windows, приложений и служб WWW при помощи ASP.NET, а также элементов управления Windows и WWW Рассматриваются общие библиотеки классов .NET, в частности, доступ к данным с помощью ADO.NET и доступ к службе Active Directory с применением классов DirectoryServices.

Для кого предназначена эта книга

Эта книга предназначена для опытных разработчиков, возможно, имеющих опыт программирования на VB, C++ или Java, но не использовавших ранее в своей работе язык C# и платформу .NET. Программистам, применяющим современные технологии, книга даст полное представление о том, как писать программы на C# для платформы .NET.

Основные темы книги

• Все особенности языка C#

• C# и объектно-ориентированное программирование

• Приложения и службы Windows

• Создание web-страниц и web-служб с помощью ASP NET

• Сборки .NET

• Доступ к данным при помощи ADO NET

• Создание распределённых приложений с помощью NET Remoting

• Интеграция с COM, COM+ и службой Active Directory

C# для профессионалов. Том II - читать онлайн бесплатно полную версию (весь текст целиком)

C# для профессионалов. Том II - читать книгу онлайн бесплатно, автор Симон Робинсон
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

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

В качестве примера сделаем краткий обзор фрагмента кода, приведенного ниже.

public bool PlaceOrder(bool CommitTrans) {

// Попытка работы

try {

if (CommitTrans) {

// Эта транзакция должна быть зафиксирована

// шаг 1 — увеличить число единиц продукта ID=2 на 10

IncreaseUnits(2, 10);

// шаг 2 — сократить запас продукта ID=2 на 10 единиц

ReduceStock(2, 10);

} else {

// Эта транзакция должна быть отменена

// шаг 1 — увеличить число единиц продукта ID=5 на 5 единиц

IncreaseUnits(5, 5);

// шаг 2 - сократить запас продукта ID=5 на 5 единиц

ReduceStock(5, 5);

}

// Если все прошло хорошо, завершить транзакцию.

ContextUtil.SetComplete();

return true;

}

// Этот код выполняется, если встречается ошибка.

catch (Exception е) {

// Отменить работу, которую выполнила эта функция.

ContextUtil.SetAbort();

return false;

}

}

Что здесь происходит?

Мы имеем две транзакции, которые обрабатываются в зависимости от значения CommitTrans. Для любой транзакции PlaceOrder()вызывает два метода, которые оба соединяющиеся с базой данных Northwind, чтобы сделать изменения в таблице Product. Метод ReduceStock()сокращает объем запасов в столбце UnitsInStock, метод IncreaseUnits()увеличивает значение столбца UnitsOnOrder(). Для обоих методов первым параметром является ProductIDв строке, которую нужно изменить, второй параметр есть величина, на которую мы хотим изменить соответствующий столбец.

Выполняющаяся транзакция контролируется булевой переменной CommitTrans, передаваемой в PlaceOrder(). Первая транзакция должна быть зафиксирована, так как уровень запаса для ProductID=2равен 17, следовательно, можно удалить десять элементов и все еще иметь оставшийся запас. Однако вторая транзакция обречена на отказ так как ProductID=5не имеет запаса элементов и существует ограничение на столбец UnitsInStock, которое не позволяет значению становиться меньше нуля. Это означает, что можно проверить, будет ли транзакция отменяться или нет. Не должно быть никаких проблем с вызовом IncreaseStock(), поэтому можно увидеть, что транзакция была отменена, проверяя значение столбца UnitsOnOrderдля ProductID=5.

В блоке try, если все идет хорошо, или, другими словами, если поток выполнения должен покинуть PlaceOrder()нормально, через return true, инструкция PlaceOrder()вызывает метод SetComplete()объекта ContextUtil, эффективно сообщая DTC через менеджер ресурсов, что в той части, которая касается его, транзакцию необходимо зафиксировать.

С другой стороны, если где-то в PlaceOrderвозникает ошибка и порождается исключение, управление программой будет передано предложению catch(). В этом предложении PlaceOrder()вызовет метод SetAbort()объекта ContextUtil. Этот метод посылает голос PlaceOrder()за отмену транзакции, в которую он вовлечен, и DTC после получения этого голоса от менеджера ресурсов прикажет каждому участнику транзакции отменить свою работу.

Помните, что не требуется создавать экземпляр объекта ContextUtil, чтобы вызвать его методы SetComplete()и SetAbort(). Эти методы класса, поэтому их можно вызывать прямо на классе.

Практически любой код, поддерживающий транзакции будет походить на код в примере. Он вызывает SetComplete()перед своей точкой выхода для фиксации всей работы, которая была успешно выполнена, или он вызывает метод SetAbort()класса ContextUtilв своем обработчике ошибок, чтобы все отменить в связи с ошибкой. Существует, правда, еще более простой способ.

Компания Microsoft предоставляет атрибут .NET, называемый AutoComplete. Методы, модифицированные с помощью этого атрибута, автоматически применяют подход, описанный выше. И хотя такие методы никогда явно не ссылаются на класс ContextUtil, они неявно завершают свои транзакции, если те заканчиваются нормально, или отменяют всю работу если выход происходит в связи с ошибкой (когда порождается исключение). По прежнему необходимо вызывать SetAbort(), чтобы отменить работу транзакции если порождается исключение.

[AutoComplete]

public bool PlaceOrder(bool CommitTrans) {

try {

if (CommitTrans) {

// Эта транзакция должна быть зафиксирована

// шаг 1 — Увеличить число единиц продукта ID=2 на 10

IncreaseUnits(2, 10);

// шаг 2 - Сократить запас продукта ID=2 на 10 единиц

ReduceStock(2, 10);

} else {

// Эта транзакция должна быть отменена

// шаг 1 - Увеличить число единиц продукта ID=5 на 5

IncreaseUnits(5, 5);

// шаг 2 — Сократить запас продукта ID=5 на 5 единиц

ReduceStock(5, 5);

}

return true;

} catch (Exception e) {

ContextUtil.SetAbort();

return false;

}

}

Это полный код примера всей транзакции, он показывает, как все части объединяются. Следующее просто встроено в библиотеку классов с заданным сильным именем и зарегистрировано в глобальном кэше сборок.

using System;

using System.EnterpriseServices;

using System.Data.SqlClient;

namespace OrderTransaction {

[Transaction(TransactionOptiоn.Required)]

public class Purchase : ServicedComponent {

public Purchase() { }

public bool PlaceOrder(bool CommitTrans) {

// Попытка работы

try {

if (CommitTrans) {

// Эта транзакция должна быть зафиксирована

// шаг 1 - Увеличить число единиц продукта ID=2 на 10

IncreaseUnits(2, 10);

// шаг 2 - Сократить запас продукта ID=2 на 10 единиц

ReduceStock(2, 10);

} else {

// Эта транзакция должна быть отменена

// шаг 3 — Увеличить число единиц продукта ID=5 на 5

IncreaseUnits(5, 5);

// шаг 2 — Сократить запас продукта ID=5 на 5

единиц ReduceStock(5, 5);

}

// Если все прошло хорошо, закончить транзакцию.

ContextUtil.SetComplete();

return true;

}

// Этот код выполняется, если встречается ошибка.

catch (Exception e) {

// Отменить работу, которую выполнила эта функция.

ContextUtil.SetAbort();

return false;

}

}

public void ReduceStock(int ProductID, int amount) {

string source = "server ephemeral;uid=sa;pwd=garysql;database Northwind";

SqlConnection conn = new SqlConnection(source);

string command =

"UPDATE Products SET UnitsInStock = UnitsInStock - " +

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать


Симон Робинсон читать все книги автора по порядку

Симон Робинсон - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




C# для профессионалов. Том II отзывы


Отзывы читателей о книге C# для профессионалов. Том II, автор: Симон Робинсон. Читайте комментарии и мнения людей о произведении.


Понравилась книга? Поделитесь впечатлениями - оставьте Ваш отзыв или расскажите друзьям

Напишите свой комментарий
x