รายละเอียดของการตอบ ::
ขอบคุณ คุณ Mr.Win มากค่ะ
คำตอบคุณมีประโยชน์มากค่ะ แต่ดิฉันยังไม่แน่ใจว่า ดิฉันเข้าใจคำตอบคุณอย่างถูกต้องหรือเปล่า
ขอถามต่อเป็นข้อๆดังนี้นะคะ
--------------------------------------
1. ดิฉันได้ post code update ในหมายเหตุ ซึ่งมี sql update 2 คำสั่ง
อันนี้ที่คุณได้ตอบมา โดยให้ link ตัวอย่าง code transaction
...ซึ่งดิฉันเข้าใจว่า คุณกำลังบอกให้ฉัน ใช้ transaction ในกรณีที่งานนั้นต้องประกอบด้วย update 2 คำสั่งหรือมากกว่านั้น เพื่อที่ว่า ถ้าคำสั่ง update คำสั่งที่ 2 ไม่สำเร็จ จะได้ Rollback คำสั่งแรกทิ้งด้วย ใช่ไม๊คะ เหมือนไม่มีการแก้ไขใดๆ
...ถ้าดิฉันเข้าใจถูก กรุณาตอบว่าข้อ 1 ถูกด้วยค่ะ
--------------------------------------
2.
กรณีที่ ดิฉันมี sql update เพียงคำสั่งเดียว ดิฉันต้องใช้ Code Transaction ตามตัวอย่างลิงก์ที่คุณให้มาหรือไม่คะ
--------------------------------------
3. เห็นคุณเขียนว่า ให้ดูตรง Trans = objConn.BeginTransaction(IsolationLevel.ReadCommitted)
และคุณได้อธิบายว่า
Read Committed หรือ Cursor Stability
เป็น Isolation Level ที่เป็น Default ของ SQL Server 2005 ซึ่งมีการทำงานที่การใช้งานข้อมูลนั้นจะต้องเป็นข้อมูลผลลัพธ์ของ Transaction
ที่ Commit แล้วเท่านั้น กล่าวคือ หากอยู่ในระหว่างการทำงานของ Transaction ข้อมูลนั้นจะยังไม่สามารถใช้งานได้กว่า Transaction นั้นจะ
Commit เสียก่อน เป็นการแก้ปัญหา Uncommitted Dependency (Dirty Read) กล่าวได้ว่า Isolation Level นี้สามารถแก้ปัญหา
Uncommitted Dependency(Dirty Read) ได้เท่านั้น ส่วนปัญหาข้ออื่นไม่สามารถแก้ปัญหาได้ Isolation Level นี้มักจะใช้ในงานที่ให้บริการ
ข้อมูลผ่าน Web Application ที่มีการแก้ไข-เพิ่มข้อมูลได้ ซึ่งต้องการเพียงแสดงข้อมูลที่ถูกต้อง (Commit แล้ว) และรองรับผู้ใช้งานจำนวน
มากเท่านั้น
ตรงข้อความข้างบนที่ว่า ...หากอยู่ในระหว่างการทำงานของ Transaction ข้อมูลนั้นจะยังไม่สามารถใช้งานได้กว่า Transaction นั้นจะ
Commit เสียก่อน
ซึ่งจากประโยคนี้ ดิฉันไม่แน่ใจว่าคุณตอบคำถามดิฉันหรือป่าว
...ที่ถามว่า คำสั่ง sql select กับ update เกิดขึ้นพร้อมกัน ณ วินาทีเดียวกัน จะเกิดปัญหาหรือไม่คะ
...ซึ่งดิฉันเข้าใจว่า คุณกำลังบอกว่า ขณะที่ดิฉัน update ลูกค้าจะไม่สามารถ select ได้ ใช่ไม๊คะ
ถ้าใช่ ดิฉันขอถามต่อว่า การที่ลูกค้า select ไม่ได้ หน้าจอ internet browser จะแสดงผลยังไงคะ
- แสดง error ภาษาอังกฤษบอกว่า มีอีกคนกำลังแก้ไขเรคคอร์ดนี้อยู่ หรือคะ
หรือว่า
- แสดง หน้าจอบราวเซอร์ขาวๆทั้งหน้า เหมือนเวลาสัญญาณเน็ตช้า แสดงอย่างนั้นจนกว่าคำสั่ง update ของฉันจะ commit หรือคะ ถึงจะแสดงข้อมูลที่ลูกค้า select