טראנזקציה ASP NET

itzikbs

New member
אם כבר אז System.Transactions

אם ב NET 2 ( ויש לך MSDTC לקנפג )עסקינן ואם כבר טרנזקציות אז רק אבל רק System.Transactions פשוט, קל, חזק, תומך בפעולות טרנזקציונאליות חוצי שרתים, DB , מערכת קבצים , WS ומערכות תומכות. ככה: using (TransactionScope ts = new TransactionScope()) { //yours actions !!! ... ts.Complete(); } מאמר מעניין על זה: http://msdn.microsoft.com/msdnmag/issues/05/02/DataPoints/ ביי איציק ב.
 

24sharon

New member
../images/Emo88.gif../images/Emo88.gif../images/Emo88.gif

למה הבאת את הדוגמא דווקא אחרי שסיימתי שעות רבות של חיפושים ושיטוטים, ובמיוחד אחרי שכבר כתבתי את הקוד. דרך אגב האם יש אפשרות לצאת תוך כדי? לדוגמא בקוד אני מבצעת בדיקה ובמידה והיא לא מתבצעת אני רוצה להפסיק (לבצע ROLLBACK) האם זה אפשרי?
if (ERR.Text.Length > 0) //לא יכלה להתבצע חסימה לאחד המשתמשים ולכן מתבצע ROLLBACK לכל הטראנזקציה { try { transaction.Rollback(); } catch (Exception ex2) { // This catch block will handle any errors that may have occurred // on the server that would cause the rollback to fail, such as // a closed connection. ERR.Text += "Rollback Exception Type: " + ex2.GetType(); ERR.Text += " Message: " + ex2.Message; ERR.Text += "<br />" + "איראה שגיאה במהלך הפעולה"; } } else { //הכל עבר בשלום ולכן יש לאשר את הטראנזקציה transaction.Commit(); .... }​
בכל אופן יפה ושימושי - לפעם הבאה.
 

yairov

New member
תגובה

הנה דוגמא פשוטה יחסית:
using (DbTransaction transaction = Connection.BeginTransaction(IsolationLevel.ReadCommitted)) { foreach (string command in commands) { DbCommand command = CreateCommand(command); command.Connection = Connection; command.Transaction = transaction; command.Prepare(); command.ExecuteNonQuery(); } try { transaction.Commit(); } catch (Exception e) { transaction.Rollback(); throw e; } finally { transaction.Dispose(); } }​
 

24sharon

New member
זה שייך לADO.NET, וכך באמת אני עשית

אבל איציק דיבר על System.Transactions, ועל זה רציתי לברר. בכל אופן תודה רבה
 

itzikbs

New member
TransactionAbortedException

פשוט זרקי TransactionAbortedException וזהו ... המנגנון הזה כל כך פשוט (מה שהיה קרוי פעם COM+ או System.EnterpriseServices), שאת לא צריכה לעשות כמעט כלום. אגב,שוב , זה מנהל פעולות טרנזקציונאליות של רישום לכמה DB במקביל, רישום למערכת קבצים או שיתוף מערכות חיצוניות לגמרי, לדעתי מומלץ מאוד להשתמש רק בזה ולא בשל ה ADO משום שזה גם חוסך ומנהל קוד בצורה טובה יותר וכך שכבות המערכת יכולות להיות יותר קריאות וברורות, אבל זה כבר דיון אחר ... את יכולה להתחיל לקרוא על זה כאן: http://msdn2.microsoft.com/en-us/library/system.transactions.aspx ביי איציק ב.
 
למעלה