SqlConnection.BeginTransaction Metódus
Definíció
Fontos
Egyes információk olyan, kiadás előtti termékekre vonatkoznak, amelyek a kiadásig még jelentősen módosulhatnak. A Microsoft nem vállal kifejezett vagy törvényi garanciát az itt megjelenő információért.
Adatbázis-tranzakciót indít el.
Túlterhelések
| Name | Description |
|---|---|
| BeginTransaction() |
Adatbázis-tranzakciót indít el. |
| BeginTransaction(IsolationLevel) |
Elindít egy adatbázis-tranzakciót a megadott elkülönítési szinttel. |
| BeginTransaction(String) |
Elindít egy adatbázis-tranzakciót a megadott tranzakciónévvel. |
| BeginTransaction(IsolationLevel, String) |
Elindít egy adatbázis-tranzakciót a megadott elkülönítési szinttel és tranzakciónévvel. |
BeginTransaction()
Adatbázis-tranzakciót indít el.
public:
System::Data::SqlClient::SqlTransaction ^ BeginTransaction();
public System.Data.SqlClient.SqlTransaction BeginTransaction();
override this.BeginTransaction : unit -> System.Data.SqlClient.SqlTransaction
member this.BeginTransaction : unit -> System.Data.SqlClient.SqlTransaction
Public Function BeginTransaction () As SqlTransaction
Válaszok
Az új tranzakciót jelképező objektum.
Kivételek
Több aktív eredményhalmaz (MARS) használatakor a párhuzamos tranzakciók nem engedélyezettek.
A párhuzamos tranzakciók nem támogatottak.
Példák
Az alábbi példa létrehoz egy SqlConnection és egy SqlTransaction. Azt is bemutatja, hogyan használhatja az , a BeginTransactionCommités Rollback a metódusokat.
private static void ExecuteSqlTransaction(string connectionString)
{
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
SqlCommand command = connection.CreateCommand();
SqlTransaction transaction;
// Start a local transaction.
transaction = connection.BeginTransaction();
// Must assign both transaction object and connection
// to Command object for a pending local transaction
command.Connection = connection;
command.Transaction = transaction;
try
{
command.CommandText =
"Insert into Region (RegionID, RegionDescription) VALUES (100, 'Description')";
command.ExecuteNonQuery();
command.CommandText =
"Insert into Region (RegionID, RegionDescription) VALUES (101, 'Description')";
command.ExecuteNonQuery();
// Attempt to commit the transaction.
transaction.Commit();
Console.WriteLine("Both records are written to database.");
}
catch (Exception ex)
{
Console.WriteLine("Commit Exception Type: {0}", ex.GetType());
Console.WriteLine(" Message: {0}", ex.Message);
// Attempt to roll back the transaction.
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.
Console.WriteLine("Rollback Exception Type: {0}", ex2.GetType());
Console.WriteLine(" Message: {0}", ex2.Message);
}
}
}
}
Private Sub ExecuteSqlTransaction(ByVal connectionString As String)
Using connection As New SqlConnection(connectionString)
connection.Open()
Dim command As SqlCommand = connection.CreateCommand()
Dim transaction As SqlTransaction
' Start a local transaction
transaction = connection.BeginTransaction()
' Must assign both transaction object and connection
' to Command object for a pending local transaction.
command.Connection = connection
command.Transaction = transaction
Try
command.CommandText = _
"Insert into Region (RegionID, RegionDescription) VALUES (100, 'Description')"
command.ExecuteNonQuery()
command.CommandText = _
"Insert into Region (RegionID, RegionDescription) VALUES (101, 'Description')"
command.ExecuteNonQuery()
' Attempt to commit the transaction.
transaction.Commit()
Console.WriteLine("Both records are written to database.")
Catch ex As Exception
Console.WriteLine("Commit Exception Type: {0}", ex.GetType())
Console.WriteLine(" Message: {0}", ex.Message)
' Attempt to roll back the transaction.
Try
transaction.Rollback()
Catch ex2 As Exception
' 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.
Console.WriteLine("Rollback Exception Type: {0}", ex2.GetType())
Console.WriteLine(" Message: {0}", ex2.Message)
End Try
End Try
End Using
End Sub
Megjegyzések
Ez a parancs leképozza a BEGIN TRANSACTION SQL Server implementációját.
A tranzakciót kifejezetten véglegesítenie vagy vissza kell állítania a Commit módszerrel.Rollback Ha meg szeretné győződni arról, hogy a SQL Server tranzakciókezelési modell .NET keretrendszer Data Provider megfelelően működik, kerülje a SQL Server által biztosított egyéb tranzakciókezelési modellek használatát.
Note
Ha nem ad meg elkülönítési szintet, a rendszer az alapértelmezett elkülönítési szintet használja. Az elkülönítési szint metódussal való BeginTransaction megadásához használja a paramétert (iso) használó BeginTransaction túlterhelést. A tranzakcióhoz beállított elkülönítési szint a tranzakció befejezése után és a kapcsolat lezárásáig vagy törléséig megmarad. Az elkülönítési szint pillanatképre állítása olyan adatbázisban, ahol a pillanatkép elkülönítési szintje nincs engedélyezve, nem okoz kivételt. A tranzakció az alapértelmezett elkülönítési szinttel fejeződik be.
Figyelmeztetés
Ha egy tranzakció elindul, és a kiszolgálón 16-os vagy magasabb szintű hiba történik, a rendszer csak a metódus meghívása után állítja vissza a Read tranzakciót. Az ExecuteReader nem eredményez kivételt.
Figyelmeztetés
Amikor a lekérdezés nagy mennyiségű adatot ad vissza, és meghívja BeginTransaction, a rendszer SqlException ad vissza, mert SQL Server nem engedélyezi a párhuzamos tranzakciókat a MARS használatakor. A probléma elkerülése érdekében mindig társítsa a tranzakciót a parancshoz, a kapcsolathoz vagy mindkettőhöz, mielőtt bármelyik olvasó megnyílik.
A SQL Server tranzakciókról további információt a Transactions (Transact-SQL) című témakörben talál.
Lásd még
- Tranzakciók és egyidejűség
- Csatlakozás adatforráshoz az ADO-ban.NET
- SQL Server és ADO.NET
- ADO.NET áttekintése
A következőre érvényes:
BeginTransaction(IsolationLevel)
Elindít egy adatbázis-tranzakciót a megadott elkülönítési szinttel.
public:
System::Data::SqlClient::SqlTransaction ^ BeginTransaction(System::Data::IsolationLevel iso);
public System.Data.SqlClient.SqlTransaction BeginTransaction(System.Data.IsolationLevel iso);
override this.BeginTransaction : System.Data.IsolationLevel -> System.Data.SqlClient.SqlTransaction
member this.BeginTransaction : System.Data.IsolationLevel -> System.Data.SqlClient.SqlTransaction
Public Function BeginTransaction (iso As IsolationLevel) As SqlTransaction
Paraméterek
- iso
- IsolationLevel
Az elkülönítési szint, amely alatt a tranzakciónak futnia kell.
Válaszok
Az új tranzakciót jelképező objektum.
Kivételek
Több aktív eredményhalmaz (MARS) használatakor a párhuzamos tranzakciók nem engedélyezettek.
A párhuzamos tranzakciók nem támogatottak.
Példák
Az alábbi példa létrehoz egy SqlConnection és egy SqlTransaction. Azt is bemutatja, hogyan használhatja az , a BeginTransactionCommités Rollback a metódusokat.
private static void ExecuteSqlTransaction(string connectionString)
{
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
SqlCommand command = connection.CreateCommand();
SqlTransaction transaction;
// Start a local transaction.
transaction = connection.BeginTransaction(IsolationLevel.ReadCommitted);
// Must assign both transaction object and connection
// to Command object for a pending local transaction
command.Connection = connection;
command.Transaction = transaction;
try
{
command.CommandText =
"Insert into Region (RegionID, RegionDescription) VALUES (100, 'Description')";
command.ExecuteNonQuery();
command.CommandText =
"Insert into Region (RegionID, RegionDescription) VALUES (101, 'Description')";
command.ExecuteNonQuery();
transaction.Commit();
Console.WriteLine("Both records are written to database.");
}
catch (Exception e)
{
try
{
transaction.Rollback();
}
catch (SqlException ex)
{
if (transaction.Connection != null)
{
Console.WriteLine("An exception of type " + ex.GetType() +
" was encountered while attempting to roll back the transaction.");
}
}
Console.WriteLine("An exception of type " + e.GetType() +
" was encountered while inserting the data.");
Console.WriteLine("Neither record was written to database.");
}
}
}
Private Sub ExecuteSqlTransaction(ByVal connectionString As String)
Using connection As New SqlConnection(connectionString)
connection.Open()
Dim command As SqlCommand = connection.CreateCommand()
Dim transaction As SqlTransaction
' Start a local transaction
transaction = connection.BeginTransaction(IsolationLevel.ReadCommitted)
' Must assign both transaction object and connection
' to Command object for a pending local transaction
command.Connection = connection
command.Transaction = transaction
Try
command.CommandText = _
"Insert into Region (RegionID, RegionDescription) VALUES (100, 'Description')"
command.ExecuteNonQuery()
command.CommandText = _
"Insert into Region (RegionID, RegionDescription) VALUES (101, 'Description')"
command.ExecuteNonQuery()
transaction.Commit()
Console.WriteLine("Both records are written to database.")
Catch e As Exception
Try
transaction.Rollback()
Catch ex As SqlException
If Not transaction.Connection Is Nothing Then
Console.WriteLine("An exception of type " & ex.GetType().ToString() & _
" was encountered while attempting to roll back the transaction.")
End If
End Try
Console.WriteLine("An exception of type " & e.GetType().ToString() & _
"was encountered while inserting the data.")
Console.WriteLine("Neither record was written to database.")
End Try
End Using
End Sub
Megjegyzések
Ez a parancs leképozza a BEGIN TRANSACTION SQL Server implementációját.
A tranzakciót kifejezetten véglegesítenie vagy vissza kell állítania a Commit módszerrel.Rollback Ha meg szeretné győződni arról, hogy a SQL Server tranzakciókezelési modell .NET keretrendszer Data Provider megfelelően működik, kerülje a SQL Server által biztosított egyéb tranzakciókezelési modellek használatát.
Note
A tranzakció véglegesítése vagy visszaállítása után a tranzakció elkülönítési szintje továbbra is megmarad az automatikus kiküldéses módban (az alapértelmezett SQL Server). Ez váratlan eredményeket eredményezhet, például a megismételhető olvasás elkülönítési szintjét, amely megőrzi és kizárja a többi felhasználót a sorból. Az elkülönítési szint alapértelmezettre (READ COMMITTED) való visszaállításához hajtsa végre a Transact-SQL SET TRANSACTION ISOLATION LEVEL READ COMMITTED utasítást, vagy hívja meg SqlConnection.BeginTransaction, majd azonnal SqlTransaction.Commit. A SQL Server elkülönítési szintekről további információt a Transaction-elkülönítési szintek című témakörben talál.
A SQL Server tranzakciókról további információt a Transactions (Transact-SQL) című témakörben talál.
Figyelmeztetés
Amikor a lekérdezés nagy mennyiségű adatot ad vissza, és meghívja BeginTransaction, a rendszer SqlException ad vissza, mert SQL Server nem engedélyezi a párhuzamos tranzakciókat a MARS használatakor. A probléma elkerülése érdekében mindig társítsa a tranzakciót a parancshoz, a kapcsolathoz vagy mindkettőhöz, mielőtt bármelyik olvasó megnyílik.
Lásd még
- Transactions (ADO.NET)
- Csatlakozás adatforráshoz (ADO.NET)
A .NET-keretrendszer Data Provider használata SQL Server - ADO.NET áttekintése
A következőre érvényes:
BeginTransaction(String)
Elindít egy adatbázis-tranzakciót a megadott tranzakciónévvel.
public:
System::Data::SqlClient::SqlTransaction ^ BeginTransaction(System::String ^ transactionName);
public System.Data.SqlClient.SqlTransaction BeginTransaction(string transactionName);
override this.BeginTransaction : string -> System.Data.SqlClient.SqlTransaction
member this.BeginTransaction : string -> System.Data.SqlClient.SqlTransaction
Public Function BeginTransaction (transactionName As String) As SqlTransaction
Paraméterek
- transactionName
- String
A tranzakció neve.
Válaszok
Az új tranzakciót jelképező objektum.
Kivételek
Több aktív eredményhalmaz (MARS) használatakor a párhuzamos tranzakciók nem engedélyezettek.
A párhuzamos tranzakciók nem támogatottak.
Példák
Az alábbi példa létrehoz egy SqlConnection és egy SqlTransaction. Azt is bemutatja, hogyan használhatja az , a BeginTransactionCommités Rollback a metódusokat.
private static void ExecuteSqlTransaction(string connectionString)
{
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
SqlCommand command = connection.CreateCommand();
SqlTransaction transaction;
// Start a local transaction.
transaction = connection.BeginTransaction("SampleTransaction");
// Must assign both transaction object and connection
// to Command object for a pending local transaction
command.Connection = connection;
command.Transaction = transaction;
try
{
command.CommandText =
"Insert into Region (RegionID, RegionDescription) VALUES (100, 'Description')";
command.ExecuteNonQuery();
command.CommandText =
"Insert into Region (RegionID, RegionDescription) VALUES (101, 'Description')";
command.ExecuteNonQuery();
// Attempt to commit the transaction.
transaction.Commit();
Console.WriteLine("Both records are written to database.");
}
catch (Exception ex)
{
Console.WriteLine("Commit Exception Type: {0}", ex.GetType());
Console.WriteLine(" Message: {0}", ex.Message);
// Attempt to roll back the transaction.
try
{
transaction.Rollback("SampleTransaction");
}
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.
Console.WriteLine("Rollback Exception Type: {0}", ex2.GetType());
Console.WriteLine(" Message: {0}", ex2.Message);
}
}
}
}
Private Sub ExecuteSqlTransaction(ByVal connectionString As String)
Using connection As New SqlConnection(connectionString)
connection.Open()
Dim command As SqlCommand = connection.CreateCommand()
Dim transaction As SqlTransaction
' Start a local transaction
transaction = connection.BeginTransaction("SampleTransaction")
' Must assign both transaction object and connection
' to Command object for a pending local transaction.
command.Connection = connection
command.Transaction = transaction
Try
command.CommandText = _
"Insert into Region (RegionID, RegionDescription) VALUES (100, 'Description')"
command.ExecuteNonQuery()
command.CommandText = _
"Insert into Region (RegionID, RegionDescription) VALUES (101, 'Description')"
command.ExecuteNonQuery()
' Attempt to commit the transaction.
transaction.Commit()
Console.WriteLine("Both records are written to database.")
Catch ex As Exception
Console.WriteLine("Exception Type: {0}", ex.GetType())
Console.WriteLine(" Message: {0}", ex.Message)
' Attempt to roll back the transaction.
Try
transaction.Rollback("SampleTransaction")
Catch ex2 As Exception
' 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.
Console.WriteLine("Rollback Exception Type: {0}", ex2.GetType())
Console.WriteLine(" Message: {0}", ex2.Message)
End Try
End Try
End Using
End Sub
Megjegyzések
Ez a parancs leképozza a BEGIN TRANSACTION SQL Server implementációját.
A paraméter hossza nem haladhatja meg a transactionName 32 karaktert, ellenkező esetben kivétel lesz.
A paraméter értéke a transactionName metódus későbbi hívásaiban Rollback és paraméterében savePointSave is használható.
A tranzakciót kifejezetten véglegesítenie vagy vissza kell állítania a Commit módszerrel.Rollback Ha meg szeretné győződni arról, hogy a SQL Server tranzakciókezelési modell .NET keretrendszer Data Provider megfelelően működik, kerülje a SQL Server által biztosított egyéb tranzakciókezelési modellek használatát.
A SQL Server tranzakciókról további információt a Transactions (Transact-SQL) című témakörben talál.
Figyelmeztetés
Amikor a lekérdezés nagy mennyiségű adatot ad vissza, és meghívja BeginTransaction, a rendszer SqlException ad vissza, mert SQL Server nem engedélyezi a párhuzamos tranzakciókat a MARS használatakor. A probléma elkerülése érdekében mindig társítsa a tranzakciót a parancshoz, a kapcsolathoz vagy mindkettőhöz, mielőtt bármelyik olvasó megnyílik.
Lásd még
- Transactions (ADO.NET)
- Csatlakozás adatforráshoz (ADO.NET)
A .NET-keretrendszer Data Provider használata SQL Server - ADO.NET áttekintése
A következőre érvényes:
BeginTransaction(IsolationLevel, String)
Elindít egy adatbázis-tranzakciót a megadott elkülönítési szinttel és tranzakciónévvel.
public:
System::Data::SqlClient::SqlTransaction ^ BeginTransaction(System::Data::IsolationLevel iso, System::String ^ transactionName);
public System.Data.SqlClient.SqlTransaction BeginTransaction(System.Data.IsolationLevel iso, string transactionName);
override this.BeginTransaction : System.Data.IsolationLevel * string -> System.Data.SqlClient.SqlTransaction
member this.BeginTransaction : System.Data.IsolationLevel * string -> System.Data.SqlClient.SqlTransaction
Public Function BeginTransaction (iso As IsolationLevel, transactionName As String) As SqlTransaction
Paraméterek
- iso
- IsolationLevel
Az elkülönítési szint, amely alatt a tranzakciónak futnia kell.
- transactionName
- String
A tranzakció neve.
Válaszok
Az új tranzakciót jelképező objektum.
Kivételek
Több aktív eredményhalmaz (MARS) használatakor a párhuzamos tranzakciók nem engedélyezettek.
A párhuzamos tranzakciók nem támogatottak.
Példák
Az alábbi példa létrehoz egy SqlConnection és egy SqlTransaction. Azt is bemutatja, hogyan használhatja az , a BeginTransactionCommités Rollback a metódusokat.
private static void ExecuteSqlTransaction(string connectionString)
{
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
SqlCommand command = connection.CreateCommand();
SqlTransaction transaction;
// Start a local transaction.
transaction = connection.BeginTransaction(
IsolationLevel.ReadCommitted, "SampleTransaction");
// Must assign both transaction object and connection
// to Command object for a pending local transaction.
command.Connection = connection;
command.Transaction = transaction;
try
{
command.CommandText =
"Insert into Region (RegionID, RegionDescription) VALUES (100, 'Description')";
command.ExecuteNonQuery();
command.CommandText =
"Insert into Region (RegionID, RegionDescription) VALUES (101, 'Description')";
command.ExecuteNonQuery();
transaction.Commit();
Console.WriteLine("Both records are written to database.");
}
catch (Exception e)
{
try
{
transaction.Rollback("SampleTransaction");
}
catch (SqlException ex)
{
if (transaction.Connection != null)
{
Console.WriteLine("An exception of type " + ex.GetType() +
" was encountered while attempting to roll back the transaction.");
}
}
Console.WriteLine("An exception of type " + e.GetType() +
" was encountered while inserting the data.");
Console.WriteLine("Neither record was written to database.");
}
}
}
Private Sub ExecuteSqlTransaction(ByVal connectionString As String)
Using connection As New SqlConnection(connectionString)
connection.Open()
Dim command As SqlCommand = connection.CreateCommand()
Dim transaction As SqlTransaction
' Start a local transaction.
transaction = connection.BeginTransaction( _
IsolationLevel.ReadCommitted, "SampleTransaction")
' Must assign both transaction object and connection
' to Command object for a pending local transaction.
command.Connection = connection
command.Transaction = transaction
Try
command.CommandText = _
"Insert into Region (RegionID, RegionDescription) VALUES (100, 'Description')"
command.ExecuteNonQuery()
command.CommandText = _
"Insert into Region (RegionID, RegionDescription) VALUES (101, 'Description')"
command.ExecuteNonQuery()
transaction.Commit()
Console.WriteLine("Both records are written to database.")
Catch e As Exception
Try
transaction.Rollback("SampleTransaction")
Catch ex As SqlException
If Not transaction.Connection Is Nothing Then
Console.WriteLine("An exception of type " & ex.GetType().ToString() & _
" was encountered while attempting to roll back the transaction.")
End If
End Try
Console.WriteLine("An exception of type " & e.GetType().ToString() & _
"was encountered while inserting the data.")
Console.WriteLine("Neither record was written to database.")
End Try
End Using
End Sub
Megjegyzések
Ez a parancs leképozza a BEGIN TRANSACTION SQL Server implementációját.
A paraméter értéke a transactionName metódus későbbi hívásaiban Rollback és paraméterében savePointSave is használható.
A tranzakciót kifejezetten véglegesítenie vagy vissza kell állítania a Commit módszerrel.Rollback Annak érdekében, hogy a SQL Server tranzakciókezelési modell megfelelően teljesítsen, ne használjon más tranzakciókezelési modelleket, például az SQL Server által biztosítottat.
Note
A tranzakció véglegesítése vagy visszaállítása után a tranzakció elkülönítési szintje továbbra is megmarad az automatikus kiküldéses módban (az alapértelmezett SQL Server). Ez váratlan eredményeket eredményezhet, például a megismételhető olvasás elkülönítési szintjét, amely megőrzi és kizárja a többi felhasználót a sorból. Az elkülönítési szint alapértelmezettre (READ COMMITTED) való visszaállításához hajtsa végre a Transact-SQL SET TRANSACTION ISOLATION LEVEL READ COMMITTED utasítást, vagy hívja meg SqlConnection.BeginTransaction, majd azonnal SqlTransaction.Commit. A SQL Server elkülönítési szintekről további információt a Transaction-elkülönítési szintek című témakörben talál.
A SQL Server tranzakciókról további információt a Transactions (Transact-SQL) című témakörben talál.
Figyelmeztetés
Amikor a lekérdezés nagy mennyiségű adatot ad vissza, és meghívja BeginTransaction, a rendszer SqlException ad vissza, mert SQL Server nem engedélyezi a párhuzamos tranzakciókat a MARS használatakor. A probléma elkerülése érdekében mindig társítsa a tranzakciót a parancshoz, a kapcsolathoz vagy mindkettőhöz, mielőtt bármelyik olvasó megnyílik.
Lásd még
- Transactions (ADO.NET)
- Csatlakozás adatforráshoz (ADO.NET)
A .NET-keretrendszer Data Provider használata SQL Server - ADO.NET áttekintése