Register Register Member Login Member Login Member Login Forgot Password ??
PHP , ASP , ASP.NET, VB.NET, C#, Java , jQuery , Android , iOS , Windows Phone
 

Registered : 109,027

HOME > .NET Framework > Forum > คำสั่ง sql select กับ update เกิดขึ้นพร้อมกัน ณ วินาทีเดียวกัน จะเกิดปัญหาหรือไม่คะ (asp.net & ms access)



 

คำสั่ง sql select กับ update เกิดขึ้นพร้อมกัน ณ วินาทีเดียวกัน จะเกิดปัญหาหรือไม่คะ (asp.net & ms access)

 



Topic : 069571

Guest




มีข้อสงสัยค่ะ

เว็บไซต์ที่กำลังสร้างอยู่นี่ เป็น asp.net (vb) ซึ่งใช้ฐานข้อมูล microsoft access
เลยสงสัยว่า
ขณะหนึ่ง ลูกค้ากำลัง select ข้อมูล record หนึ่งอยู่ ณ เวลาเดียวกันนั้น ก็มี เจ้าหน้าที่เว็บไซต์กำลัง update ข้อมูล record นั้นด้วย

กรณีนี้ คำสั่ง sql select กับ update เกิดขึ้นพร้อมกัน ณ วินาทีเดียวกัน จะเกิดปัญหาหรือไม่คะ (แล้วอย่างหมายเหตุข้างล่างนี้ เป็น คำสั่ง update 2 คำสั่ง (หรือ 2 ตาราง) ถ้าเกิดขึ้นพร้อมกับคำสั่ง select จะเกิดปัญหาหรือไม่คะ แล้วต้องแก้โค้ดข้างล่างยังไงคะ )
และกรณี คำสั่ง sql select กับ delete เกิดขึ้นพร้อมกัน ณ วินาทีเดียวกัน จะเกิดอะไรขึ้นคะ จะเกิดปัญหาหรือไม่คะ


...ช่วยหน่อยค่ะ ไม่ค่อยชำนาญเรื่องฐานข้อมูลเชิงลึกค่ะ
ขอบคุณค่ะ

-------------------------------------------------------------

หมายเหตุ : code update ในโปรแกรม asp.net

'////////// BEGIN Update Package to Database////////////////////
Dim objConn As New OleDbConnection
Dim objCmd As New OleDbCommand
Dim strConnString, strSQL As String

strConnString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("database/prosogo.mdb") & ";Jet OLEDB:Database Password=asiangamec2605;"
objConn.ConnectionString = strConnString
objConn.Open()

'///////BEGIN Update Table Package ////////////

strSQL = "UPDATE package SET " & _
" Title = '" & Me.txtTitle.Text & "' " & _
" ,Province = '" & strProvince & "' " & _
" ,ExpireDate = '" & Me.txtExpireDate.Text & "' " & _
" ,Detail = '" & Me.textboxDetail.Text & "' " & _
" ,Hilight = '" & Me.textboxHilight.Text & "' " & _
" ,Contact = '" & Me.txtContact.Text & "' " & _
" WHERE PackageID = " & lblPackageId.Text

objCmd = New OleDbCommand
With objCmd
.Connection = objConn
.CommandText = strSQL
.CommandType = CommandType.Text
End With

Try
objCmd.ExecuteNonQuery()
Catch ex As Exception
objConn.Close()
objConn = Nothing
Page.RegisterClientScriptBlock("OnLoad", "<script>alert('ไม่สามารถ update แพ็คเกจในตารางแพ็คเกจ / และ ไม่สามารถ update ชื่อแพ็คเกจในตารางคำสั่งซื้อ / ดู Error Message ที่ด้านบนสุดของหน้าจอ')</script>")
Response.Write(ex.Message)
Exit Sub
End Try
'///////END Update Table Package ////////////

'///////BEGIN Update PackageTitle In Table Ordering ////////
strSQL = "Update ordering Set PackageTitle='" & Me.txtTitle.Text & "' WHERE fPackageId = " & lblPackageId.Text
'ทดสอบแล้ว ถ้ายังไม่มี fPackageId นี้ใน Table Ordering คำสั่ง objCmd.ExecuteNonQuery() ก็ไม่ Error แม้ว่าจะไม่มี Record ให้อัพเดท objCmd = New OleDbCommand(strSQL, objConn)

Try
objCmd.ExecuteNonQuery()
Catch ex As Exception
objConn.Close()
objConn = Nothing
Page.RegisterClientScriptBlock("OnLoad", "<script>alert('ไม่สามารถ update ชื่อแพ็คเกจในตารางคำสั่งซื้อ /แต่ update แพ็คเกจในตารางแพ็คเกจ สำเร็จเรียบร้อยแล้ว / ดู Error Message ที่ด้านบนสุดของหน้าจอ')</script>")
Response.Write(ex.Message)
Exit Sub
End Try
'///////END Update PackageTitle In Table Ordering ////////

objConn.Close()
objConn = Nothing

pnlEdit.Visible = False
CheckBox1.Checked = False
Page.RegisterClientScriptBlock("OnLoad", "<script>alert('Updateแพ็คเกจในตารางแพ็คเกจ และ Updateชื่อแพ็คเกจในตารางคำสั่งซื้อ สำเร็จเรียบร้อยแล้ว')</script>")




Tag : .NET, Ms Access, Web (ASP.NET), VS 2003 (.NET 1.1)







Move To Hilight (Stock) 
Send To Friend.Bookmark.
Date : 2011-11-26 11:59:27 By : muay View : 8376 Reply : 10
 

 

No. 1



โพสกระทู้ ( 74,058 )
บทความ ( 838 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์
Twitter Facebook

ลองดูพวก Transaction ครับ

Go to : ASP.NET Microsoft Access Transaction (BeginTransaction,Commit,Rollback)

ดูตรง

Code
Trans = objConn.BeginTransaction(IsolationLevel.ReadCommitted)



Unspecified
A different isolation level than the one specified is being used, but the level cannot be determined.
When using OdbcTransaction, if you do not set IsolationLevel or you set IsolationLevel to Unspecified, the transaction executes according to the isolation level that is determined by the driver that is being used.

Chaos
The pending changes from more highly isolated transactions cannot be overwritten.
ReadUncommitted A dirty read is possible, meaning that no shared locks are issued and no exclusive locks are honored.

ReadCommitted Shared locks are held while the data is being read to avoid dirty reads, but the data can be changed before the end of the transaction, resulting in non-repeatable reads or phantom data.
RepeatableRead Locks are placed on all data that is used in a query, preventing other users from updating the data. Prevents non-repeatable reads but phantom rows are still possible.

Serializable A range lock is placed on the DataSet, preventing other users from updating or inserting rows into the dataset until the transaction is complete.
Snapshot Reduces blocking by storing a version of data that one application can read while another is modifying the same data. Indicates that from one transaction you cannot see changes made in other transactions, even if you requery.


Read Uncommitted
เป็น Isolation Level ระดับต่ำที่สุด ซึ่งมีการทำงานใช้ข้อมูลร่วมกัน โดยไม่มีการ Lock ข้อมูลเลย อีกทั้งยังสามารถนำข้อมูลผลลัพธ์ของ Transaction ที่ยังไม่ Commit ไปใช้งานได้อีกด้วย จึงทำให้อัตราความผิดพลาดของข้อมูลในฐานข้อมูลมีโอกาสเกิดได้สูง กล่าวได้ว่า Isolation Level ระดับนี้ ไม่ได้แก้ปัญหา Concurrency Control Problem ข้อใด ๆ ได้เลย ซึ่งมักจะกำหนด Isolation Level นี้กับงานที่ให้บริการอ่านข้อมูลได้อย่างเดียว ไม่สามารถเพิ่ม ลบ และแก้ไขข้อมูลได้ หรือไม่มีการแก้ไขข้อมูลบ่อยนัก ซึ่งจะสามารถรองรับผู้ใช้งานพร้อมกันในเวลาเดียวกันได้เป็นจำนวนมาก
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 แล้ว) และรองรับผู้ใช้งานจำนวนมากเท่านั้น
Repeatable Read
มีลักษณะการทำงานอยู่ในรูปแบบ HOLD LOCK ระหว่างที่กำลังทำงานกับข้อมูล จะไม่ปลด Lock จนกว่า Transaction จะ Commit ซึ่งจะแก้ปัญหา Lost Update, Uncommitted Dependency (Dirty Read) และ Inconsistent Analysis (Non Repeatable Read) ได้ แต่ว่า Isolation Level นี้ยังไม่สามารถแก้ปัญหา Phantom Phenomenon ได้
Serializable
เป็น Isolation Level ระดับสูงสุดที่สามารถแก้ปัญหา Concurrency Control Problem ทั้ง 4 ข้อได้ ซึ่งรับประกันถึงความถูกต้องของข้อมูลสูงสุดด้วย แต่ว่า Isolation Level นี้มีอัตราการ Lock ข้อมูลสูงและมีโอกาสของการเกิด Deadlock สูงด้วย

http://greatfriends.biz/webboards/msg.asp?id=67190
http://msdn.microsoft.com/en-us/library/system.data.isolationlevel.aspx






แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2011-11-26 16:52:42 By : webmaster
 


 

No. 2

Guest


ตอบความคิดเห็นที่ : 1 เขียนโดย : webmaster เมื่อวันที่ 2011-11-26 16:52:42
รายละเอียดของการตอบ ::
ขอบคุณ คุณ 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



แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2011-11-27 00:59:35 By : muay
 

 

No. 3



โพสกระทู้ ( 74,058 )
บทความ ( 838 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์
Twitter Facebook

1. ผมแค่ให้ดูเป็นตัวอย่างครับ จะกี่ Query ก็ใช้ Transaction ได้ครับ
2. คุณใช้ Transaction ได้ครับ มันสามารถทำการ Lock Table ที่คุณกำลัง Select ไว้อยู่ได้ครับ
3. ผมให้คุณดู Property ของ IsolationLevel ครับ ซึ่งในกรณีที่ถูก Lock เข้าใจว่า Process จะรอกันครับ ซึ่งมันเร็วมาก จึงไม่ค่อยเห็นผลของการทำงาน
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2011-11-27 08:52:08 By : webmaster
 


 

No. 4

Guest


ตอบความคิดเห็นที่ : 3 เขียนโดย : webmaster เมื่อวันที่ 2011-11-27 08:52:08
รายละเอียดของการตอบ ::
... เข้าใจแล้วค่ะ ขอบคุณเป็นอย่างมากค่ะ ...ได้รับความช่วยเหลือจากคุณ Mr.win มาหลายทีแล้วคะ ...ชอบเว็บ thaicreate.com จังค่ะ

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2011-11-27 23:28:42 By : muay
 


 

No. 5

Guest


ตอบความคิดเห็นที่ : 1 เขียนโดย : webmaster เมื่อวันที่ 2011-11-26 16:52:42
รายละเอียดของการตอบ ::
ASP.NET Microsoft Access Transaction (BeginTransaction,Commit,Rollback) --> https://www.thaicreate.com/asp.net/asp.net-ms-access-transaction-commit-rollback.html
ตัวอย่างที่คุณ mr.win ให้มาอันนี้

...มันบอกแค่ว่า สามารถใช้ได้ทั้งการ Insert/Update Record ....

ซึ่งดิฉันสงสัยว่า ถ้าดิฉันจะใช้กับ Delete record จำนวนมากได้ไม๊คะ

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2011-12-03 23:53:02 By : muay
 


 

No. 6



โพสกระทู้ ( 74,058 )
บทความ ( 838 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์
Twitter Facebook

ได้ครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2011-12-04 00:07:31 By : webmaster
 


 

No. 7

Guest


ตอบความคิดเห็นที่ : 3 เขียนโดย : webmaster เมื่อวันที่ 2011-11-27 08:52:08
รายละเอียดของการตอบ ::
จากความเห็นที่ 3 ของคุณ mr.win (ที่บอกว่า ... 2. คุณใช้ Transaction ได้ครับ มันสามารถทำการ Lock Table ที่คุณกำลัง Select ไว้อยู่ได้ครับ) ขอถามให้แน่ใจหน่อยค่ะ

สงสัยว่า
1. ใส่โค้ด transaction ทั้ง หน้าเว็บที่ลูกค้าselect และ หน้าที่พนักงานอัพเดทข้อมูล

หรือ
2. ใส่โค้ด transaction เฉพาะหน้าที่พนักงานอัพเดทข้อมูล เท่านั้น (หน้าลูกค้าselectไม่ต้องใส่)

ตอบข้อไหนคะ ...ณ ปัจจุบันดิฉันกำลังเข้าใจว่าตอบข้อ 2 ค่ะ ถูกไม๊คะ ผิดหรือถูกช่วยบอกหน่อยค่ะ

รบกวนหน่อยค่ะ น่าจะเป็นคำถามสุดท้ายสำหรับหัวข้อนี้ล่ะค่ะ ...เกรงใจจังค่ะ ขอบคุณมากค่ะ

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2011-12-19 15:51:51 By : muay
 


 

No. 8



โพสกระทู้ ( 74,058 )
บทความ ( 838 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์
Twitter Facebook

Transaction ใส่ได้เฉพาะในหน้าที่กำลังทำงาน และ Process อยุ่ครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2011-12-19 16:12:23 By : webmaster
 


 

No. 9

Guest


ตอบความคิดเห็นที่ : 8 เขียนโดย : webmaster เมื่อวันที่ 2011-12-19 16:12:23
รายละเอียดของการตอบ ::
ไม่ค่อยเข้าใจคำตอบค่ะ เป็นคนเข้าใจอะไรยากค่ะ...... (555 ที่เมื่อกี๊บอก ...น่าจะเป็นคำถามสุดท้ายสำหรับหัวข้อนี้ ...คงไม่ใช่แล้ว)

สรุปว่าไรคะ ...select ไม่ต้องใส่ โค้ด transaction ....ใช่ไม๊คะ

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2011-12-19 20:24:32 By : muay
 


 

No. 10



โพสกระทู้ ( 74,058 )
บทความ ( 838 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์
Twitter Facebook

ลองทำความเข้าใจกับ #1 ครับ คือ Transaction มันสามารถครอบการทำงานทั้งหมดที่ต้องการครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2011-12-21 07:03:56 By : webmaster
 

   

ค้นหาข้อมูล


   
 

แสดงความคิดเห็น
Re : คำสั่ง sql select กับ update เกิดขึ้นพร้อมกัน ณ วินาทีเดียวกัน จะเกิดปัญหาหรือไม่คะ (asp.net & ms access)
 
 
รายละเอียด
 
ตัวหนา ตัวเอียง ตัวขีดเส้นใต้ ตัวมีขีดกลาง| ตัวเรืองแสง ตัวมีเงา ตัวอักษรวิ่ง| จัดย่อหน้าอิสระ จัดย่อหน้าชิดซ้าย จัดย่อหน้ากึ่งกลาง จัดย่อหน้าชิดขวา| เส้นขวาง| ขนาดตัวอักษร แบบตัวอักษร
ใส่แฟลช ใส่รูป ใส่ไฮเปอร์ลิ้งค์ ใส่อีเมล์ ใส่ลิ้งค์ FTP| ใส่แถวของตาราง ใส่คอลัมน์ตาราง| ตัวยก ตัวห้อย ตัวพิมพ์ดีด| ใส่โค้ด ใส่การอ้างถึงคำพูด| ใส่ลีสต์
smiley for :lol: smiley for :ken: smiley for :D smiley for :) smiley for ;) smiley for :eek: smiley for :geek: smiley for :roll: smiley for :erm: smiley for :cool: smiley for :blank: smiley for :idea: smiley for :ehh: smiley for :aargh: smiley for :evil:
Insert PHP Code
Insert ASP Code
Insert VB.NET Code Insert C#.NET Code Insert JavaScript Code Insert C#.NET Code
Insert Java Code
Insert Android Code
Insert Objective-C Code
Insert XML Code
Insert SQL Code
Insert Code
เพื่อความเรียบร้อยของข้อความ ควรจัดรูปแบบให้พอดีกับขนาดของหน้าจอ เพื่อง่ายต่อการอ่านและสบายตา และตรวจสอบภาษาไทยให้ถูกต้อง

อัพโหลดแทรกรูปภาพ

Notice

เพื่อความปลอดภัยของเว็บบอร์ด ไม่อนุญาติให้แทรก แท็ก [img]....[/img] โดยการอัพโหลดไฟล์รูปจากที่อื่น เช่นเว็บไซต์ ฟรีอัพโหลดต่าง ๆ
อัพโหลดแทรกรูปภาพ ให้ใช้บริการอัพโหลดไฟล์ของไทยครีเอท และตัดรูปภาพให้พอดีกับสกรีน เพื่อความโหลดเร็วและไฟล์ไม่ถูกลบทิ้ง

   
  เพื่อความปลอดภัยและการตรวจสอบ กระทู้ที่แทรกไฟล์อัพโหลดไฟล์จากที่อื่น อาจจะถูกลบทิ้ง
 
โดย
อีเมล์
บวกค่าให้ถูก
<= ตัวเลขฮินดูอารบิก เช่น 123 (หรือล็อกอินเข้าระบบสมาชิกเพื่อไม่ต้องกรอก)







Exchange: นำเข้าสินค้าจากจีน, Taobao, เฟอร์นิเจอร์, ของพรีเมี่ยม, ร่ม, ปากกา, power bank, แฟลชไดร์ฟ, กระบอกน้ำ

Load balance : Server 02
ThaiCreate.Com Logo
© www.ThaiCreate.Com. 2003-2024 All Rights Reserved.
ไทยครีเอทบริการ จัดทำดูแลแก้ไข Web Application ทุกรูปแบบ (PHP, .Net Application, VB.Net, C#)
[Conditions Privacy Statement] ติดต่อโฆษณา 081-987-6107 อัตราราคา คลิกที่นี่