NET Programming.

استفاده از OleDbTransaction در NET.

قبلا در بخش Sql Server در مطلبی با عنوان Transaction چیست به چیستی و چگونگی استفاده از آن در Sql Server پرداخته ایم.
که بهتر است در ابتدا آن مطلب را بخوانید

Transaction یا تراکنش چیست؟

اما در این مطلب می خواهیم به چگونگی استفاده از Oledbtransaction با استفاده از یک مثال بپردازیم.

در ابتدا فایلی با نام transaction در Access 2007 ایجاده کرده و دو جدول به نامهای book و nasher به صورت زیر ایجاد کنید.





حالا با استفاده از مسیر Project/Add Reference و برگه NET. اقدام به اضافه کردن System.Transactions به پروژه خود بکنید.

و حالا دو فضای نام زیر را به برنامه اضافه کنید:

C#.NET
using System.Transactions;
using System.Data.OleDb;

VB.NET
Imports System.Data.OleDb
Imports System.Transactions

سپس متغیرهای زیر را به صورت سراسری تعریف کنید


C#.NET
OleDbConnection con;
OleDbTransaction tran;

VB.NET
Dim con As New OleDbConnection
Dim tran As OleDbTransaction

در رویداد load فرم دستورات زیر را بنویسید


C#.NET
con = new OleDbConnection();
con.ConnectionString="Provider=Microsoft.ACE.OLEDB.12.0;DataSource="+Application.StartupPath + "\\transaction.accdb";
con.Open();

VB.NET
con = New OleDbConnection()
con.ConnectionString="Provider=Microsoft.ACE.OLEDB.12.0;DataSource="+Application.StartupPath + "\\transaction.accdb"
con.Open()

حالا توابع مربوط به insert کردن داده ها به دو جدول book و nasher را به صورت زیر تعریف کنید


C#.NET
private bool insertnasher(string nasherid, string nashername, string nasherplace)
{
 try
 {
   OleDbCommand cominsert = new OleDbCommand();
   cominsert.Connection = con;
   cominsert.CommandText = "Insert Into nasher Values(@nasherid,@nashername,@nasherplace)";
   cominsert.Parameters.AddWithValue("@nasherid", nasherid);
   cominsert.Parameters.AddWithValue("@nashername", nashername);
   cominsert.Parameters.AddWithValue("@nasherplace", nasherplace);
   cominsert.Transaction = tran;
   cominsert.ExecuteNonQuery();
 }
 catch (Exception)
 {
   return false;
 }
   return true;
}

VB.NET
Private Function insertnasher(ByVal nasherid As String, ByVal nashername As String, ByVal nasherplace As String) As Boolean
  Try
     Dim cominsert As New OleDbCommand()
     cominsert.Connection = con
     cominsert.CommandText = "Insert Into nasher Values(@nasherid,@nashername,@nasherplace)"
     cominsert.Parameters.AddWithValue("@nasherid", nasherid)
     cominsert.Parameters.AddWithValue("@nashername", nashername)
     cominsert.Parameters.AddWithValue("@nasherplace", nasherplace)
     cominsert.Transaction = tran
     cominsert.ExecuteNonQuery()
  Catch ex As Exception
     Return False
  End Try
     Return True
End Function

C#.NET
private bool insertbook(string bookid, string bookname, string nasherid, int bookamount)
{
 try
 {
   OleDbCommand cominsert = new OleDbCommand();
   cominsert.Connection = con;
   cominsert.CommandText="Insert Into book Values  (@bookid,@bookname,@nasherid,@bookamount)";
   cominsert.Parameters.AddWithValue("@bookid", bookid);
   cosminsert.Parameters.AddWithValue("@bookname", bookname);
   cominsert.Parameters.AddWithValue("@nasherid", nasherid);
   cominsert.Parameters.AddWithValue("@bookamount", bookamount);
   cominsert.Transaction = tran;
   cominsert.ExecuteNonQuery();
 }
 catch (Exception)
 {
   return false;
 }
   return true;
}

VB.NET
Private Function insertbook(ByVal bookid As String, ByVal bookname As String, ByVal nasherid As String, ByVal bookamount As Integer) As Boolean
 Try
  Dim cominsert As New OleDbCommand()
  cominsert.Connection = con
  cominsert.CommandText="Insert Into book Values    (@bookid,@bookname,@nasherid,@bookamount)"
  cominsert.Parameters.AddWithValue("@bookid", bookid)
  cominsert.Parameters.AddWithValue("@bookname", bookname)
  cominsert.Parameters.AddWithValue("@nasherid", nasherid)
  cominsert.Parameters.AddWithValue("@bookamount", "bookamount")
  cominsert.Transaction = tran
  cominsert.ExecuteNonQuery()
 Catch ex As Exception
   Return False
 End Try
   Return True
End Function

حالا در رویداد کلیک دکمه Button دستورات زیر را بنویسید


C#.NET
bool b;
using (tran = con.BeginTransaction())
{
  b = insertnasher("150", "امیرکبیر", "تهران");
  if (b)
     b = b = insertbook("3000", "Computer", "120", 10);
  if (b)
    tran.Commit();
  else
    tran.Rollback();
}

VB.NET
Dim b As Boolean
tran = con.BeginTransaction
Using (tran)
  b = insertnasher("160", "امیرکبیر", "تهران")
  If (b) Then
    b = insertbook("3010", "Computer", "120", 10)
  End If
  If (b) Then
    tran.Commit()
  Else
    tran.Rollback()
  End If
End Using

با استفاده از دستور commit دو عمل insert برروی جداول انجام می شود و در صورتی که عملیات insert یکی از جداول با شکست مواجه شود با استفاده از دستور rollback عملیات insert برروی هیچکدام از جداول انجام نمی شود.

نکته مهم در این دستورات تعریف transaction مربوط به command هردستور با tran است. اگر این خط از دستورات حذف شود عملیات transaction به درستی انجام نمی شود.



دیدگاه شما :

نام             

ایمیل         

وب سایت  

پیام
                  

Warning: mysql_connect() [function.mysql-connect]: Can't connect to MySQL server on '207.158.5.107' (10060) in C:\HostingSpaces\mobtaker\mobtakercode.com\wwwroot\2012.php on line 474
نمی تواند به سرویس دهنده متصل شودCan't connect to MySQL server on '207.158.5.107' (10060)