Вход/Регистрация
C# для профессионалов. Том II
вернуться

Ватсон Карли

Шрифт:

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 - " +

amount.ToString + " WHERE ProductID = " + ProductID.ToString;

conn.Open;

sqlCommand cmd = new SqlCommand(command, conn);

cmd.ExecuteNonQuery;

conn.Close;

}

public void IncreaseUnits(int ProductID, int amount) {

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

SqlConnection conn = new SqlConnection(source);

string command =

"UPDATE Products SET UnitsOnOrder = UnitsOnOrder +

" amount.ToString + " WHERE ProductID = " + ProductID.ToString;

conn.Open;

SqlCommand cmd = new SqlCommand(command, conn);

cmd.ExecuteNonQuery;

conn.Close;

}

public void Restore {

// Восстановить запас продукта ID=2

ReduceStock(2, -10);

// Восстановить единицы продукта для ID=2

IncreaseUnits(2, -10);

// Не требуется восстанавливать запас или единицы продукта для ID=5,

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

}

 }

}

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

statiс void Main(string[] args) {

 Purchase order = new Purchase;

 Console.WriteLine("\nThis transaction should commit");

 Console.WriteLine("ProductID = 2, ordering 10 items");

 if (Order.PlaceOrder(true)) Console.WriteLine("Transaction Successful");

 else Console.WriteLine("Transaction Unsuccessful");

 Console.WriteLine("\nThis transaction should roll back");

 Console.WriteLine("ProductID = 5, ordering 5 items");

 if (Order.PlaceOrder(false)) Console.WriteLine("Transaction Successful");

 else Console.WriteLine("Transaction Unsuccessful");

 Console.WriteLine(

  • Читать дальше
  • 1
  • ...
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: