ASP MySQL Transaction (BeginTrans,CommitTrans,RollbackTrans) |
ASP MySQL Transaction (BeginTrans,CommitTrans,RollbackTrans) ตัวอย่างนี้จะเป็นการเขียนโปรแกรม ASP กับ MySQL ใช้งาน Transaction ในการตรวจสอบความถูกต้องก่อนการทำการบันทึกข้อมูลจริง หลักการคือ เมื่อมีการ BeginTrans แล้ว ภายใต้คำสั่งที่อยู่ในเงื่อนไนนี้จะมีการตรวจสอบว่ามีการทำงานถูกต้อง หรือมีข้อผิดพลาดหรือไม่ ถ้าไม่มีข้อผิดพลาดก็จะทำการ CommitTrans หรือถ้ามีข้อผิดพลาดโปรแกรมจะทำการ RollbackTrans คือยกเลิกข้อมูลที่ได้ทำการกระทำในแต่แรก
Transaction Syntax
'*** Begin Transaction ***'
Conn.BeginTrans
'*** Rollback Transaction ***'
Conn.RollbackTrans
'*** Commit Transaction ***'
Conn.CommitTrans
เพิ่มเติม
ในการใช้งาน Transaction จะต้องกำหนดชนิดของ Table เป็นแบบ InnoDB
InnoDB Syntax
CREATE TABLE `customer` (
.
.
.
.
) ENGINE=InnoDB;
ตัวอย่าง
ตัวอย่างนี้จะเป็นการเพิ่มข้อมูล โดยผมได้สมมุติการเพิ่มข้อมูลซ้ำ ซึ่งมี Primary Key ชื่อ CustomerID ซึ่งจะสามารถเพิ่มข้อมูลสำเร็จใน Statement แรก และ Statement ที่ 2 จะไม่สามารถเพิ่มข้อมูลได้ และเมื่อมีการ RollBack ข้อมูล Statement แรกที่ถูก Insert ไปแล้วก็จะถูกยกเลิกในทันที สำหรับการใช้ Transaction สามารถใช้ได้ทั้งการ Insert/Update/Delete Record
AspMySQLTransactionAddForm.asp
<html>
<head>
<title>ThaiCreate.Com ASP & MySQL Tutorial</title>
</head>
<body>
<form action="AspMySQLTransactionAddSave.asp" name="frmAdd" method="post">
<table width="600" border="1">
<tr>
<th width="91"> <div align="center">CustomerID </div></th>
<th width="160"> <div align="center">Name </div></th>
<th width="198"> <div align="center">Email </div></th>
<th width="97"> <div align="center">CountryCode </div></th>
<th width="70"> <div align="center">Budget </div></th>
<th width="70"> <div align="center">Used </div></th>
</tr>
<tr>
<td><div align="center"><input type="text" name="txtCustomerID" size="5"></div></td>
<td><input type="text" name="txtName" size="20"></td>
<td><input type="text" name="txtEmail" size="20"></td>
<td><div align="center"><input type="text" name="txtCountryCode" size="2"></div></td>
<td align="right"><input type="text" name="txtBudget" size="5"></td>
<td align="right"><input type="text" name="txtUsed" size="5"></td>
</tr>
</table>
<input type="submit" name="submit" value="submit">
</form>
</body>
</html>
Screenshot
AspMySQLTransactionAddSave.asp
<% Option Explicit %>
<html>
<head>
<title>ThaiCreate.Com ASP & MySQL Tutorial</title>
</head>
<body>
<%
Dim Conn,strSQL,objExec
Set Conn = Server.Createobject("ADODB.Connection")
Conn.Open "DRIVER={MySQL ODBC 5.1 Driver}; SERVER=localhost;UID=root; " & _
"pwd=root;database=mydatabase;option=16384;"
On Error Resume Next
'*** Transaction Start ***'
Conn.BeginTrans
'*** Save Form ***'
strSQL = ""
strSQL = strSQL &"INSERT INTO customer "
strSQL = strSQL &"(CustomerID,Name,Email,CountryCode,Budget,Used) "
strSQL = strSQL &"VALUES "
strSQL = strSQL &"('"&Request.Form("txtCustomerID")&"','"&Request.Form("txtName")&"', '"&Request.Form("txtEmail")&"' "
strSQL = strSQL &",'"&Request.Form("txtCountryCode")&"','"&Request.Form("txtBudget")&"', '"&Request.Form("txtUsed")&"') "
Set objExec = Conn.Execute(strSQL)
If Err.Number <> 0 Then
'*** Rollback Transaction ***'
Conn.RollbackTrans
Response.write("Error Save ["&strSQL&"] ("&Err.Description&")")
Response.end
End If
'*** Already Exist Save Form (CustomerID is PK)***'
strSQL = ""
strSQL = strSQL &"INSERT INTO customer "
strSQL = strSQL &"(CustomerID,Name,Email,CountryCode,Budget,Used) "
strSQL = strSQL &"VALUES "
strSQL = strSQL &"('"&Request.Form("txtCustomerID")&"','"&Request.Form("txtName")&"', '"&Request.Form("txtEmail")&"' "
strSQL = strSQL &",'"&Request.Form("txtCountryCode")&"','"&Request.Form("txtBudget")&"', '"&Request.Form("txtUsed")&"') "
Set objExec = Conn.Execute(strSQL)
If Err.Number <> 0 Then
'*** Rollback Transaction ***'
Conn.RollbackTrans
Response.write("Error Save ["&strSQL&"] ("&Err.Description&")")
Response.end
End If
If Err.Number = 0 Then
Conn.CommitTrans
Response.write("Save Done.")
End IF
Conn.Close()
Set objExec = Nothing
Set Conn = Nothing
%>
</body>
</html>
Screenshot
Error MessageError Save [INSERT INTO customer (CustomerID,Name,Email,CountryCode,Budget,Used) VALUES ('C005','Weerachai Nukitram','[email protected]' ,'TH','2000000','1000000') ] ([MySQL][ODBC 5.1 Driver][mysqld-5.0.45-community-nt-log]Duplicate entry 'C005' for key 1)[/b]
|