BeginTransaction betyder ikke, at "din transaktion er startet, og alt er låst". Det informerer bare RDBMS om din hensigt med at indlede en transaktion, og at alt, hvad du skal gøre fra nu af, bør og skal betragtes som atomare.
Det betyder, at du kan ringe til BeingTransaction, og jeg kunne slette alle data fra alle tabeller i din database, og RDBMS vil med glæde lade mig gøre det. Forhåbentlig bør det ikke lade mig droppe DB'en, fordi du har en åben forbindelse til den, dog ved man aldrig i disse dage. Der kan være nogle udokumenterede funktioner, jeg ikke er klar over.
Atomisk betyder, at enhver handling eller et sæt af handlinger skal udføres som én. Hvis nogen af dem fejler, fejler de alle. Det er et alt eller intet koncept.
Det ser ud til, at du indsætter tre rækker i en tabel. Hvis din tabel er tom eller har et meget lavt antal rækker, kan det muligvis låse hele tabellen afhængigt af LOCK ESCALATION-reglerne i din RDBMS. Men hvis det er et stort eller meget stort eller opdelt bord, garanterer LOCK-eskaleringsreglerne muligvis ikke en bordlås. Så det kan stadig være muligt for flere transaktioner at indsætte rækker i din tabel på samme tid. Det hele afhænger af, hvordan RDBMS håndterer denne situation, og hvordan din datamodel er opbygget.
Nu for at besvare dit spørgsmål:
TIP - Se efter en måde at låse hele tabellen på, før du begynder at indsætte data.
Dette er dog normalt ikke godt, men jeg går ud fra, at du har en rimelig grund til at gøre det.
Håber dette hjælper.