Și cum crezi că ar trebui să o anuleze? trimiteți sql-server doar text în esență, pars și execută dacă cererea este corectă. în caz contrar, se returnează o eroare care este emisă ca o excepție în cod.
BeginExecuteReader și EndExecuteReader sunt necesare pentru cererile asincrone.
În orice caz, tranzacția merge pe latura Sql. Netul pur și simplu o deschide și apoi se angajează sau revine la discreția ta.
dacă ați deschis o tranzacție, atunci la un nivel de izolare specific, solicitările selectate vor include acele modificări pe care le faceți în cadrul tranzacției. în măsura în care îmi amintesc că există un nivel în care cererile selectate nu vor include modificări. Citiți documentația despre aceasta.
Anula încearcă să anuleze solicitarea și încearcă să o transfere către SQLServer. Dacă cererea este lungă și constă în pași separați și acești pași au început deja să fie executați, echipa va fi întreruptă. Dacă există o livrare, atunci ea poate fi de asemenea întreruptă.
Dacă ați întrerupt, nu trebuie să continuați să citiți - întrerupeți, nu apelați Citiți (), închideți cititorul și notificați-l pe utilizator. Dacă utilizați BeginExecuteReader, puteți simplifica procesul de așteptare și întrerupere, dar procesul de obținere a datelor este puțin mai complicat.
Într-un singur proiect, am acționat oarecum diferit. Am primit rapid identificatorii obiectelor relevante pentru interogare și apoi în liniște într-un fir separat citim liniile de date (multe coloane lente). Acest proces a fost controlat de mine și ar putea fi întrerupt în orice moment. Ca bonus, se obține progresul corect.