Transactions are the base part of ACID theory. When you are including transaction be sure that it won't create any problem when multiple process call that code.
Description : It is based on ACID theory, Atomicity, Consistency, Isolation and Durability.
What is an Atomic transaction? The best way to understand is a bank accounting system.
Consider that two bank X and bank Y want to Withdrew amount with someone's account at the same time. Suppose the account has $100.00 in it. If bank X withdrow $70.00 and at the same time bank B tries to get $50.00, Than what happen? When they start the transaction each bank believes there is $100.00 available in the account. When one of them finishes other one finds there isn't enough money to finish the transaction.
Code for Transaction :
defining a class where ServiceComponent are inheriting.
using System;
using System.Text;
using System.EnterpriseServices;
using System.Data;
using System.Data.SqlClient;
namespace AtomicTransactions
{
public class MyTransaction : ServicedComponent
{
Main Logic to handle transaction, After adding the value in to database, It checks a constraint which cause and threw the exception, if value was not between 10 and 100. Please see below for code;
public void Transfer(int accountID, int intValues, string connectionString) { try { AddValue(accountID, intValues, connectionString); if ((intValues< 10) || (intValues> 100)) throw new ArgumentException("Value is not valid!"); ContextUtil.SetComplete();// Atomic transaction ends here } catch (Exception ex) { throw new Exception ("An error occurred in transaction"); } }
Calling add Logic value to save data into database;
private void AddValue(int id, int value, string connectionString) { try { using (SqlConnection connection = new SqlConnection(connectionString)) { SqlCommand command = new SqlCommand("AddToAccount", connection); command.CommandType = CommandType.StoredProcedure; command.Parameters.AddWithValue("id", id); command.Parameters.AddWithValue("value", value); connection.Open(); command.ExecuteNonQuery(); } } catch (Exception ex) { throw ex; } }
No comments:
Post a Comment