ตัวอย่าง เช่น การโอนเงินผ่านธนาคาร จาก นาย ก. ไปให้ นาย ข. ถ้าเรามองการทำงานเวลาเราไปโอนเงินผ่านตู้ ATM เราจะเห็นว่ามีการทำงานแค่ครั้งเดียว คือ นาย ก. ไปโอนเงิน (เป็นการมองในระดับ High Level) แต่ในอีกมุมนึง การทำงานของโปรแกรม ซึ่งเป็นส่วนของการประมวลผลคำสั่งและปรับปรุงข้อมูลลงฐานข้อมูล จะเกิดขั้นตอนการปรับปรุงข้อมูลอย่างน้อย 2 คำสั่ง (มองในระดับ Low Level) คือ คำสั่งแรก จะต้องปรับปรุงข้อมูลของนาย ก. โดยลดยอดลง คำสั่งที่สอง จะเป็นการปรับปรุงข้อมูลโดยการเพิ่มเงินในบัญชีของนาย ข. ลักษณะนี้ เราจำเป็นต้องมีการทำ Transaction เพื่อป้องกันเหตุสุดวิสัยที่อาจจะทำให้การปรับปรุงข้อมูลข้างต้นไม่ให้เกิดข้อผิดพลาดในการปรับปรุงข้อมูลเกิดขึ้น
คุณสมบัติของทรานแซกชัน ประกอบด้วย
1. Atomicity คือ ความเป็นหนึ่งเดียว : การทำงานของกลุ่มคำสั่งภายใต้ทรานแซกชันจะถูกประมวลผลเสมือนเป็นคำสั่งเดียวกัน
2. Consistency คือ ความถูกต้องของข้อมูล : การทำงานของทรานแซกชันไม่ว่าจะสำเร็จหรือล้มเหลว ข้อมูลจะต้องสอดคล้องกันเสมอ
3. Isolation คือ การทำงานที่เป็นอิสระแกกัน : การทำงานของทรานแซกซันแต่ละทรานแซกชันจะเป็นอิสระจากกัน ข้อมูลที่ถูกปรับปรุงในทรานแซกชันหนึ่งจะไม่มีผลกันอีกทรานแซกชันหนึ่ง
4. Durability คือ ความคงอยู่ : ข้อมูลทั้งหมดจะคงอยู่หลังจากผ่านการคอมมิตทรานแซกชันแล้ว (commit transaction) ไม่ว่าจะเกิดเหตุการณ์ ระเบิดภูเขา เผากระท่อม หรืออื่น ๆ ก็ตาม
ตัวอย่าง การเขียนคำสั่งจัดการ Transaction ด้วยภาษา VB.Net
ให้ทำการสร้างฐานข้อมูลภายใต้ SQL Server 2008 และตารางข้อมูล พร้อมทั้งเพิ่มข้อมูลเข้าสู่ตาราง ดังนี้ (เปิดหน้าต่าง New Query ใน SQL Server 2008 แล้วป้อนคำสั่งตามตัวอย่างด้านล่าง)
CREATE DATABASE myDATA
GO
CREATE TABLE tblBankAccount (
[ACC_NO] [varchar](10) NOT NULL PRIMARY KEY,
[ACC_NAME] [varchar](50) NULL,
[AMOUNT] [money])
GO
INSERT INTO tblBankAccount (ACC_NO,ACC_NAME,AMOUNT)
VALUES('111','Kasem',50000)
INSERT INTO tblBankAccount (ACC_NO,ACC_NAME,AMOUNT)
VALUES('222','Mesak',100)
ทำการเขียนโปรแกรมด้วย VB.Net
1. เปิด Visual Studio 20xx จากนั้นคลิกเลือก New Project....
เลือก Visual Basic -> Windows -> Windows Forms Application
ที่ช่อง Name ป้อน myTransaction
จากนั้นคลิกปุ่ม OK
2. ที่ฟอร์ม ให้เพิ่มคอนโทร Button1 และ DataGridView ตามตัวอย่าง ดังภาพ
3. ให้ดับเบิลคลิกที่ฟอร์ม หรือ ปุ่ม Button1 แล้วป้อนคำสั่ง ดังนี้
Imports System.Data
Imports System.Data.SqlClient
Public Class Form1
Dim strConn As String = "Data Source=.\SQLEXPRESS;Initial Catalog=myData;Integrated Security=SSPI;"
'Data Source เปลี่ยนตามเครื่องที่ติดต่อ
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Button1.Text = "คลิกเพื่อปรับปรุงยอดโอนเงิน"
Button1.Width = 200
DisplayData()
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Using objCS = New SqlConnection(strConn)
objCS.Open()
'คำสั่งจัดการ Transaction
Dim nTR As SqlTransaction
nTR = objCS.BeginTransaction
Try
'ปรับปรุงข้อมูลชุดแรก ภายใต้ทรานแซกชัน nTR
Dim strSQL1 As String = "UPDATE tblBankAccount SET Amount = Amount - 100 WHERE Acc_no = '111'"
Dim objSQL1 As New SqlCommand(strSQL1, objCS, nTR)
objSQL1.ExecuteNonQuery()
'ปรับปรุงข้อมูลชุดที่สอง ภายใต้ทรานแซกชัน nTR
Dim strSQL2 As String = "UPDATE tblBankAccount SET Amount = Amount + 100 WHERE Acc_no = '222'"
Dim objSQL2 As New SqlCommand(strSQL2, objCS, nTR)
objSQL2.ExecuteNonQuery()
'เมื่อข้อมูลถูกปรับปรุงทั้งหมดเรียบร้อยแล้วทำการ คอมมิตทรานแซกชัน
nTR.Commit()
Catch ex As Exception
'หากเกิดข้อผิดพลาก ให้ทำการโรลแบ็ก
nTR.Rollback()
MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK)
End Try
End Using
DisplayData()
End Sub
Sub DisplayData()
' นำข้อมูลจากตาราง tblBankAccount มาแสดงในกริด
Using objCS = New SqlConnection(strConn)
Dim objDS As New DataSet()
Dim objDA = New SqlDataAdapter()
objDA.SelectCommand = New SqlCommand("SELECT * FROM tblBankAccount", objCS)
objDS.Clear()
objDA.Fill(objDS, "tblBankAccount")
DataGridView1.DataSource = objDS.Tables(0)
End Using
End Sub
End Class
4. จากนั้นกดปุ่ม F5 เพื่อทำการ Run แล้วลองทดสอบ ตามภาพ
ข้อควรระวัง การใช้ทรานแซกชันระบบฐานข้อมูลจะทำการล็อกตารางที่อยู่ภายใต้ทรานแซกชัน ดังนั้นเวลาใช้ควรทำให้เสร็จในคราวเดียวกัน อย่าเปิดทรานแซกชันค้างไว้ โดยไม่ทำการ commit หรือ rollback
ขอส่งกำลังใจให้กับทหารกล้า ที่ปกป้องประเทศ ทุก ๆ ท่าน




