NET Programming.
قبلا در بخش 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 به درستی انجام نمی شود.