<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="https://www.dotnetzone.gr:443/cs/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>.NET Framework</title><link>https://www.dotnetzone.gr:443/cs/forums/14/ShowForum.aspx</link><description>Θέματα για threading, remoting, reflection, exception handling, security, regex κλπ.</description><dc:language>el</dc:language><generator>CommunityServer 2.1 SP3 (Build: 20423.1)</generator><item><title>Απ: .netFramework 2.0 Transactions και TransactionScope</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/12462.aspx</link><pubDate>Wed, 10 May 2006 03:30:41 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:12462</guid><dc:creator>pontifikas</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/12462.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=14&amp;PostID=12462</wfw:commentRss><description>Αυτήν την στιγμή όχι.Αύριο το μεσημεράκι θα το ξαναδοκιμάσω και θα το δούμε &lt;img src="/cs/emoticons/emotion-5.gif" alt="Wink [;)]" /&gt;</description></item><item><title>Απ: .netFramework 2.0 Transactions και TransactionScope</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/12461.aspx</link><pubDate>Wed, 10 May 2006 03:27:56 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:12461</guid><dc:creator>vxan</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/12461.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=14&amp;PostID=12461</wfw:commentRss><description>Μπορείς να βάλεις το νέο κώδικα που προκύπτει ???</description></item><item><title>Απ: .netFramework 2.0 Transactions και TransactionScope</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/12460.aspx</link><pubDate>Wed, 10 May 2006 03:16:52 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:12460</guid><dc:creator>pontifikas</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/12460.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=14&amp;PostID=12460</wfw:commentRss><description>&lt;BLOCKQUOTE&gt;&lt;table width="85%"&gt;&lt;tr&gt;&lt;td class="txt4"&gt;&lt;img src="/cs/Themes/default/images/icon-quote.gif"&gt;&amp;nbsp;&lt;strong&gt;vxan wrote:&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="quoteTable"&gt;&lt;table width="100%"&gt;&lt;tr&gt;&lt;td valign="top" class="txt4"&gt;Παραθέτω το κείμενο από το MSDN &lt;br&gt;
&lt;br&gt;
"If no exception occurs within the transaction scope (that is, between the initialization of the TransactionScope object and the calling of its Dispose method), then the transaction in which the scope participates is allowed to proceed. If an exception does occur within the transaction scope, the transaction in which it participates will be rolled back."&lt;br&gt;
&lt;br&gt;
Άρα αν κτυπήσει κάποιο exception τότε θα έχεις rollback. Πάντως αν δεν χρέιάζεσαι distributed transactions δεν υπάρχει λόγος να χρησιμοποιήσεις το TransactionScope. Μπορείς να χρησιμοποιήσεις τα transactions του Data Provider.&lt;br&gt;
&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/BLOCKQUOTE&gt;&lt;br&gt;Επαναλαμβάνω ότι παρόλο που σηκώνω exception μέσα στο scope(μετά το executeNonQuery) ΔΕΝ κάνει rollback. Το update command που όρισα εκτελείται κανονικότα. &lt;br&gt;Μήπως είναι άλλη η χρησιμότητα του scope???&lt;br&gt;</description></item><item><title>Απ: .netFramework 2.0 Transactions και TransactionScope</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/12447.aspx</link><pubDate>Tue, 09 May 2006 21:56:23 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:12447</guid><dc:creator>vxan</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/12447.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=14&amp;PostID=12447</wfw:commentRss><description>Μάνο συμφωνώ και προσυπογράφω όλα όσα αναφέρεις&lt;br /&gt;
&lt;br /&gt;</description></item><item><title>Απ: .netFramework 2.0 Transactions και TransactionScope</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/12446.aspx</link><pubDate>Tue, 09 May 2006 21:49:31 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:12446</guid><dc:creator>KelMan</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/12446.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=14&amp;PostID=12446</wfw:commentRss><description>&lt;P&gt;Βαγγέλη δεν έχεις άδικο σε αυτά που λες, πράγματι το Systems.Transactions φτιάχτηκε προκειμένου να μπορέσουν οι προγραμματιστές να υλοποιούν distributed transactions χωρίς να καταφεύγουν στα Enterprise Services. &lt;/P&gt;
&lt;P&gt;Ωστόσο... τρώγοντας έρχεται η όρεξη και πλέον οι μοντέρνες εφαρμογές αρχίζουν να εκμεταλλεύονται τη λογική των transactions συμπεριλαμβάνοντας μέσα όχι μόνο database resource managers αλλά και άλλους όπως queue managers,&amp;nbsp;messaging managers&amp;nbsp;ή ακόμη και το file system (απ'οσο ξέρω το νέο file system θα υποστηρίζει transactions). Εξάλλου, το System.Transactions είναι έτσι φτιαγμένο (υποστηρίζει promotable transactions) που σημαίνει ότι όταν δουλεύει σε "local transaction mode" χρησιμοποιεί έναν lightweight transaction manager και δεν καταναλώνει τα resources που καταναλώνει ένα distributed transaction. Για την ακρίβεια ένα transaction από το System.Transaction μπορεί να περάσει από πολλαπλά επίπεδα ανάλογα με την πολυπλοκότητα του transaction και τους resource managers που λαμβάνουμε μέρος στο παιχνίδι.&amp;nbsp;Μάλιστα, στον SQL Server 2005 ένα&amp;nbsp;local transaction που το χειρίζεται το Systems.Transactions (και όχι το MSDTC) δεν επιφέρει κανένα performance hint!&lt;/P&gt;</description></item><item><title>Απ: .netFramework 2.0 Transactions και TransactionScope</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/12440.aspx</link><pubDate>Tue, 09 May 2006 20:57:05 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:12440</guid><dc:creator>vxan</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/12440.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=14&amp;PostID=12440</wfw:commentRss><description>Να προσθέσω επίσης το παρακάτω url για όσους θέλουν να επεκταθούν περισσότερο &lt;br /&gt;
&lt;br /&gt;
http://www.microsoft.com/downloads/details.aspx?FamilyId=AAC3D722-444C-4E27-8B2E-C6157ED16B15&amp;displaylang=en</description></item><item><title>Απ: .netFramework 2.0 Transactions και TransactionScope</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/12438.aspx</link><pubDate>Tue, 09 May 2006 20:43:09 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:12438</guid><dc:creator>vxan</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/12438.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=14&amp;PostID=12438</wfw:commentRss><description>Παραθέτω το κείμενο από το MSDN &lt;br /&gt;
&lt;br /&gt;
"If no exception occurs within the transaction scope (that is, between the initialization of the TransactionScope object and the calling of its Dispose method), then the transaction in which the scope participates is allowed to proceed. If an exception does occur within the transaction scope, the transaction in which it participates will be rolled back."&lt;br /&gt;
&lt;br /&gt;
Άρα αν κτυπήσει κάποιο exception τότε θα έχεις rollback. Πάντως αν δεν χρέιάζεσαι distributed transactions δεν υπάρχει λόγος να χρησιμοποιήσεις το TransactionScope. Μπορείς να χρησιμοποιήσεις τα transactions του Data Provider.&lt;br /&gt;
&lt;br /&gt;</description></item><item><title>Απ: .netFramework 2.0 Transactions και TransactionScope</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/12376.aspx</link><pubDate>Mon, 08 May 2006 15:30:00 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:12376</guid><dc:creator>pontifikas</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/12376.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=14&amp;PostID=12376</wfw:commentRss><description>&lt;BLOCKQUOTE&gt;&lt;table width="85%"&gt;&lt;tr&gt;&lt;td class="txt4"&gt;&lt;img src="/cs/Themes/default/images/icon-quote.gif"&gt;&amp;nbsp;&lt;strong&gt;KelMan wrote:&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="quoteTable"&gt;&lt;table width="100%"&gt;&lt;tr&gt;&lt;td valign="top" class="txt4"&gt;&lt;br&gt;
&lt;p&gt;Επίσης να πούμε ότι το Complete δεν είναι commit. Με το Complete, δηλώνεις ότι έχει ολοκληρωθεί η εκτέλεση των statements του transaction και κατόπιν θα επακολουθήσει το commit από τον transaction manager. Δεν υπάρχει όμως καμιά εγγύηση ότι το commit θα επιτύχει.&lt;/p&gt;
&lt;p&gt;Άρα λοιπόν τα δύο scopes στον κώδικά σου είναι άσχετα και ορθώς το update του scope1 εκτελείται άσχετα με το τι θα συμβεί στο scope2. Κατόπιν, υπάρχει κάποιο άλλο πρόβλημα;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/BLOCKQUOTE&gt;&lt;br&gt;&lt;br&gt;Βασικά το θέμα είναι ότι περίμενα το Complete να είναι Commit. Στο msdn λέει ότι αν απουσιάζει, τότε ο transaction manager ρίχνει Exception. Οπότε λογικά θα κάνει rollback. Και όμως δεν κάνει.Δοκίμασα να βάλω τα complete σε σχόλιο, και τα transactions εκτελέστικαν κανονικά.&lt;br&gt;Επίσης δοκίμασα να δημιουργήσω μόνος μου κάποιο exception μετά τα Updates προκειμένου να γίνει rollback, αλλά δεν έγινε.Τα updates εκτελούνται κανονικά.&lt;br&gt;&lt;br&gt;Πώς είναι δυνατόν να κάνω rollback Σε αυτά τα transactions????&lt;br&gt;</description></item><item><title>Απ: .netFramework 2.0 Transactions και TransactionScope</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/12369.aspx</link><pubDate>Mon, 08 May 2006 01:51:26 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:12369</guid><dc:creator>vxan</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/12369.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=14&amp;PostID=12369</wfw:commentRss><description>&lt;P&gt;Δεν μου έχει τύχει ποτέ να υλοποιήσω ποτέ κάποια λογική τύπου retry-on-fail πάντως σαφώς το requires new είναι ένα νέο transaction ανεξάρτητο από το πρώτο όσο γνωρίζω έως τη στιγμή που εμφανίστηκε το TransactionScope στο .ΝΕΤ 2.0 το suppress option δε το έχω μελετήσει ... αλλά θα το μελετήσω με τη πρώτη ευκαιρία. Γενικά πάντως η νομίζω ότι όταν κανείς σχεδιάζει τέτοια πράγματα (και ειδικά για μεγάλες εφαρμογές) πρέπει να σχεδιάζει απλά και σίγουρα. Άρα θέλω να καταλήξω ένα TransactionScope το οποίο θα κάνει όλη τη δουλειά ... στις περισσότερες των περιπτώσεων. &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description></item><item><title>Απ: .netFramework 2.0 Transactions και TransactionScope</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/12367.aspx</link><pubDate>Mon, 08 May 2006 01:22:17 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:12367</guid><dc:creator>KelMan</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/12367.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=14&amp;PostID=12367</wfw:commentRss><description>&lt;P&gt;Ο μηχανισμός των Transactions (μιλάμε πάντοτε για το System.Transaction namespace) βασίζεται στα exceptions για να καθορίσει αν η οποιαδήποτε ενέργεια είναι επιτυχής ή όχι. Άρα λοιπόν, καμιά φορά μπορεί να θέλουμε τα exceptions από τα downlevel functions να μην επηρεάσουν το outer transaction όποτε τότε χρησιμοποιούμε νέο TransactionScope με RequiresNew ή Suppress option (πχ μπορεί να έχουμε υλοποιήσει κάποια λογική τύπου "retry-on-fail" για ένα από τα βήματα&amp;nbsp;του&amp;nbsp;transaction).&lt;/P&gt;</description></item><item><title>Απ: .netFramework 2.0 Transactions και TransactionScope</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/12364.aspx</link><pubDate>Mon, 08 May 2006 01:00:44 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:12364</guid><dc:creator>vxan</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/12364.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=14&amp;PostID=12364</wfw:commentRss><description>&lt;P&gt;Δεν καταλαβαίνω γιατί κάποιος πρέπει να χρησιμοποιήσει 2 transaction scopes? Σκοπός του transaction scope είναι να λειτουργήσει ως ομπρέλλα για τα transactions που θα βάλουμε να εκτελεσθούν μέσα σε αυτό. Όπως για παράδειγμα αν έχουμε transactions σε μία ή περισσότερες βάσεις δεδομένων (distributed transactions).&amp;nbsp;Άρα το transaction scope&amp;nbsp;παραμένει ένα και μέσα σε αυτό τοποθετούμε τα database transactions (commands) που θέλουμε να εκτελεσθούν μέσα σε ένα transaction. &lt;/P&gt;
&lt;P&gt;Ελπίζω να βοήθησα ...&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description></item><item><title>Απ: .netFramework 2.0 Transactions και TransactionScope</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/12337.aspx</link><pubDate>Sat, 06 May 2006 06:03:38 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:12337</guid><dc:creator>KelMan</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/12337.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=14&amp;PostID=12337</wfw:commentRss><description>&lt;P&gt;Δεν έχω καταλάβει ακριβώς την ερώτηση που θέτεις στο τέλος, ωστόσο ας τα πιάσουμε λίγο από την αρχή.&lt;/P&gt;
&lt;P&gt;To TransactionScopeOption.Suppress&amp;nbsp;υποδηλώνει ότι ο contained κώδικας δεν συμμετέχει ως τμήμα κανενός transaction και διαθέτει δικό του μηχανισμό compensation (δηλαδή είναι custom οι ενέργειες που θα γίνονται στο rollback - πχ. αν το action είναι η απoστολή ενός e-mail, το compensation action είναι η αποστολή ενός νέου που θα λέει "παρακαλώ αγνοήστε το προηγούμενο"). Για να πούμε τι κάνει με πιο απλά λόγια, στο τρέχον transaction ανοίγει μια παρένθεση και εκτελεί ένα άλλο που δεν σχετίζεται με το εξωτερικό. Βασικά, δεν έχει πολύ νόημα η χρήση του...&lt;/P&gt;
&lt;P&gt;Επίσης να πούμε ότι το Complete δεν είναι commit. Με το Complete, δηλώνεις ότι έχει ολοκληρωθεί η εκτέλεση των statements του transaction και κατόπιν θα επακολουθήσει το commit από τον transaction manager. Δεν υπάρχει όμως καμιά εγγύηση ότι το commit θα επιτύχει.&lt;/P&gt;
&lt;P&gt;Άρα λοιπόν τα δύο scopes στον κώδικά σου είναι άσχετα και ορθώς το update του scope1 εκτελείται άσχετα με το τι θα συμβεί στο scope2. Κατόπιν, υπάρχει κάποιο άλλο πρόβλημα;&lt;/P&gt;</description></item><item><title>.netFramework 2.0 Transactions και TransactionScope</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/12320.aspx</link><pubDate>Fri, 05 May 2006 18:06:52 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:12320</guid><dc:creator>pontifikas</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/12320.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=14&amp;PostID=12320</wfw:commentRss><description>Ακολουθόντας τις προτροπές του MSDN επιχείρησα να δοκιμάσω τα διαβόητα nested transactions κάνοντας χρήση του ακόλουθου:&lt;br&gt;&lt;span style="color: Black;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;using&lt;/span&gt; (TransactionScope scope1 &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;=&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;new&lt;/span&gt; TransactionScope())&lt;br /&gt;            {&lt;br /&gt;                SqlCommand cmd1 &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;=&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;new&lt;/span&gt; SqlCommand(mStr1, sqlConnection1);&lt;br /&gt;                cmd1.ExecuteNonQuery();&lt;br /&gt;                &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;using&lt;/span&gt; (TransactionScope scope2 &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;=&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;new&lt;/span&gt; TransactionScope(TransactionScopeOption.Suppress))&lt;br /&gt;                {&lt;br /&gt;                    SqlCommand cmd2 &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;=&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;new&lt;/span&gt; SqlCommand(mStr2, sqlConnection1);&lt;br /&gt;                    cmd2.ExecuteNonQuery();&lt;br /&gt;                    scope2.Complete();&lt;br /&gt;                }&lt;br /&gt;                scope1.Complete();&lt;br /&gt;            }&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;Θεωρείστε ότι το Connection γίνεται initialized ορθώς.Το mStr είναι ένα update command.&lt;br&gt;&lt;br&gt;Λοιπόν.Με βάση το manual( ή της δικής μου αντίληψης για αυτά που λέει), εάν δεν εκτελέσω το scope2.Complete()(βάλω κάποιο σχόλιο) τότε το upadate δεν θα εκτελεστεί.Θα εκτελεστεί όμως αυτό μέσα στο scope 1. &lt;br&gt;Η ερώτηση μου είναι γιατί εκτελείται και στα 2 scopes. Γενικά το παραπάνω κομμάτι κώδικα δείχνει να εκτελεί τα updates ότι και να γίνει(έχω δοκιμάσει να δημιουργήσω exceptions καθώς και να μην καλέσω τα Complete().&lt;img src="/cs/emoticons/emotion-18.gif" alt="Huh? [:^)]" /&gt;&lt;br&gt;</description></item></channel></rss>