транзакция

Нужно добавить ссылку и подключить пространство имен System.Transactions;

using System.Transactions;

В этом примере транзакция будет передавать два пакета. В первом пакете будет заполнение таблицы данными, во втором пакете будут изменения данных.
Скрыть

Показать

Копировать
  Main.cs  
using System;
 
//добавить ссылку
using System.Linq;
 
//добавить ссылку
//подключить пространство имен
using System.Data;
using System.Data.Linq;
using System.Transactions;
 
//добавить ссылку
using System.Data.Linq.Mapping;
 
/*создание класса для сопоставления с реляционной базой данных*/
public class MyDataBase : DataContext {
 public Table<MyTable> Books;
 public MyDataBase(string connection) : base(connection) { }
}
 
/*создание класса для сопоставления с таблицей*/
[Table(Name = "Book")]
public class MyTable {
 [Column(IsPrimaryKey = true)]
 public int IDBook { set; get; }
 [Column]
 public string Name { set; get; }
 [Column]
 public int Amount { set; get; }
 [Column]
 public decimal Price { set; get; }
}
 
class Program {
 public static int Main() {
 
  /*создание данных, несколько строк*/
  var dataMany = new[] {
   new MyTable() {
    IDBook = 1,
    Name = "Азбука",
    Amount = 10,
    Price = 10.15m
   },
   new MyTable() {
    IDBook = 2,
    Name = "Букварь",
    Amount = 20,
    Price = 20.25m
   },
   new MyTable() {
    IDBook = 3,
    Name = "Математика",
    Amount = 30,
    Price = 30.35m
   }
  };
 
  /*создание данных, одна строка*/
  MyTable dataSingle = new MyTable {
   IDBook = 4,
   Name = "География",
   Amount = 40,
   Price = 40.45m
  };
 
  MyDataBase db = new MyDataBase(@"Server=(localdb)\v11.0;Integrated Security=true;AttachDbFileName=d:\zzz.mdf;");
 
  /*изменение данных*/
  //создание запроса
  var query1 =
   from val in db.Books
   where val.Name == "География"
   select val;
 
  using(TransactionScope ts = new TransactionScope()) {
   try {
    //--- 1 пакет ---
    /*вставка нескольких строк*/
    db.Books.InsertAllOnSubmit(dataMany);
    /*вставка одной строки*/
    db.Books.InsertOnSubmit(dataSingle);
    //обязательное обновление в конце пакета
    db.SubmitChanges();
 
    //--- 2 пакет ---
    //выполнение запроса
    foreach(var i in query1) {
     //устанавливаем новое значение
     i.Amount = 400;
    }
    //обязательное обновление в конце пакета
    db.SubmitChanges();
    //компилируем транзакцию
    ts.Complete();
    Console.WriteLine("Транзакция выполнена успешно!");
   }
   catch(Exception exc) {
    Console.WriteLine("Error!\n{0}", exc.Message);
   }
  }
  Console.WriteLine();
 
  /*вывод данных*/
  //создание запроса
  var query = 
   from val in db.Books
   select val;
 
  //выполнение запроса
  foreach(var i in query) {
   Console.WriteLine("{0} {1} {2} {3}", i.IDBook, i.Name, i.Amount, i.Price);
  }
 
  Console.ReadKey();
  return 0;
 }
}
 
Транзакция выполнена успешно!


1 Азбука 10 10,15
2 Букварь 20 20,25
3 Математика 30 30,35
4 География 400 40,45