SqlConnection.BeginTransaction Metoda
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Spustí transakci databáze.
Přetížení
BeginTransaction() |
Spustí transakci databáze. |
BeginTransaction(IsolationLevel) |
Spustí databázovou transakci se zadanou úrovní izolace. |
BeginTransaction(String) |
Spustí databázovou transakci se zadaným názvem transakce. |
BeginTransaction(IsolationLevel, String) |
Spustí databázovou transakci se zadanou úrovní izolace a názvem transakce. |
BeginTransaction()
Spustí transakci databáze.
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
Návraty
Objekt představující novou transakci.
Výjimky
Paralelní transakce nejsou povoleny při použití více aktivních sad výsledků (MARS).
Paralelní transakce nejsou podporovány.
Příklady
Následující příklad vytvoří SqlConnection a SqlTransaction. Ukazuje také, jak používat BeginTransactionmetody , Commita .Rollback
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
Poznámky
Tento příkaz se mapuje na SQL Server implementaci BEGIN TRANSACTION.
Musíte explicitně potvrdit nebo vrátit zpět transakce pomocí Commit metody nebo Rollback . Chcete-li zajistit, aby zprostředkovatel dat rozhraní .NET Framework pro model správy transakcí SQL Server fungoval správně, nepoužívejte jiné modely správy transakcí, jako je například model poskytovaný SQL Server.
Poznámka
Pokud nezadáte úroveň izolace, použije se výchozí úroveň izolace. K určení úrovně izolace pomocí BeginTransaction metody použijte přetížení, které přebírá iso
parametr (BeginTransaction). Úroveň izolace nastavená pro transakci přetrvává po dokončení transakce a až do ukončení nebo odstranění připojení. Nastavení úrovně izolace na Snímek v databázi, kde úroveň izolace snímku není povolená, nevyvolá výjimku. Transakce se dokončí pomocí výchozí úrovně izolace.
Upozornění
Pokud je transakce spuštěna a na serveru dojde k chybě úrovně 16 nebo vyšší, transakce nebude vrácena zpět, dokud Read není vyvolána metoda . Na ExecuteReader není vyvolán žádná výjimka.
Upozornění
Když dotaz vrátí velké množství dat a volá BeginTransaction
, SqlException vyvolá se , protože SQL Server neumožňuje paralelní transakce při použití mars. Chcete-li se vyhnout tomuto problému, vždy přidružte transakci k příkazu, připojení nebo obojím před otevřením libovolného čtenáře.
Další informace o transakcích SQL Server najdete v tématu Transakce (Transact-SQL).
Viz také
Platí pro
BeginTransaction(IsolationLevel)
Spustí databázovou transakci se zadanou úrovní izolace.
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
Parametry
- iso
- IsolationLevel
Úroveň izolace, pod kterou by měla transakce běžet.
Návraty
Objekt představující novou transakci.
Výjimky
Paralelní transakce nejsou povoleny při použití více aktivních sad výsledků (MARS).
Paralelní transakce nejsou podporovány.
Příklady
Následující příklad vytvoří SqlConnection a SqlTransaction. Ukazuje také, jak používat BeginTransactionmetody , Commita .Rollback
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
Poznámky
Tento příkaz se mapuje na SQL Server implementaci BEGIN TRANSACTION.
Musíte explicitně potvrdit nebo vrátit zpět transakce pomocí Commit metody nebo Rollback . Chcete-li zajistit, aby zprostředkovatel dat rozhraní .NET Framework pro model správy transakcí SQL Server fungoval správně, nepoužívejte jiné modely správy transakcí, jako je například model poskytovaný SQL Server.
Poznámka
Jakmile je transakce potvrzena nebo vrácena zpět, úroveň izolace transakce zůstane zachována pro všechny následné příkazy, které jsou v režimu automatického připojení (výchozí SQL Server). To může vést k neočekávaným výsledkům, jako je úroveň izolace OPAKOVATELNÉHO ČTENÍ, která přetrvává a zablokuje ostatní uživatele mimo řádek. Pokud chcete obnovit výchozí úroveň izolace (READ COMMITTED), spusťte příkaz Transact-SQL SET TRANSACTION ISOLATION LEVEL READ COMMITTED nebo okamžitě SqlTransaction.Commitzavolat SqlConnection.BeginTransaction . Další informace o úrovních izolace SQL Server najdete v tématu Úrovně izolace transakcí.
Další informace o transakcích SQL Server najdete v tématu Transakce (Transact-SQL).
Upozornění
Když dotaz vrátí velké množství dat a volá BeginTransaction
, SqlException vyvolá se , protože SQL Server neumožňuje paralelní transakce při použití mars. Chcete-li se vyhnout tomuto problému, vždy přidružte transakci k příkazu, připojení nebo obojím před otevřením libovolného čtenáře.
Viz také
- Transakce (ADO.NET)
- Připojení ke zdroji dat (ADO.NET)
- Použití zprostředkovatele dat rozhraní .NET Framework pro SQL Server
- Přehled ADO.NET
Platí pro
BeginTransaction(String)
Spustí databázovou transakci se zadaným názvem transakce.
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
Parametry
- transactionName
- String
Název transakce.
Návraty
Objekt představující novou transakci.
Výjimky
Paralelní transakce nejsou povoleny při použití více aktivních sad výsledků (MARS).
Paralelní transakce nejsou podporovány.
Příklady
Následující příklad vytvoří SqlConnection a SqlTransaction. Ukazuje také, jak používat BeginTransactionmetody , Commita .Rollback
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
Poznámky
Tento příkaz se mapuje na SQL Server implementaci BEGIN TRANSACTION.
Délka parametru transactionName
nesmí překročit 32 znaků, jinak dojde k výjimce.
Hodnotu v parametru transactionName
lze použít v pozdějších Rollback voláních a v savePoint
parametru Save metody.
Musíte explicitně potvrdit nebo vrátit zpět transakce pomocí Commit metody nebo Rollback . Chcete-li zajistit, aby zprostředkovatel dat rozhraní .NET Framework pro model správy transakcí SQL Server fungoval správně, nepoužívejte jiné modely správy transakcí, jako je například model poskytovaný SQL Server.
Další informace o transakcích SQL Server najdete v tématu Transakce (Transact-SQL).
Upozornění
Když dotaz vrátí velké množství dat a volá BeginTransaction
, SqlException vyvolá se , protože SQL Server neumožňuje paralelní transakce při použití mars. Chcete-li se vyhnout tomuto problému, vždy přidružte transakci k příkazu, připojení nebo obojím před otevřením libovolného čtenáře.
Viz také
- Transakce (ADO.NET)
- Připojení ke zdroji dat (ADO.NET)
- Použití zprostředkovatele dat rozhraní .NET Framework pro SQL Server
- Přehled ADO.NET
Platí pro
BeginTransaction(IsolationLevel, String)
Spustí databázovou transakci se zadanou úrovní izolace a názvem transakce.
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
Parametry
- iso
- IsolationLevel
Úroveň izolace, pod kterou by měla transakce běžet.
- transactionName
- String
Název transakce.
Návraty
Objekt představující novou transakci.
Výjimky
Paralelní transakce nejsou povoleny při použití více aktivních sad výsledků (MARS).
Paralelní transakce nejsou podporovány.
Příklady
Následující příklad vytvoří SqlConnection a SqlTransaction. Ukazuje také, jak používat BeginTransactionmetody , Commita .Rollback
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
Poznámky
Tento příkaz se mapuje na SQL Server implementaci BEGIN TRANSACTION.
Hodnotu v parametru transactionName
lze použít v pozdějších Rollback voláních a v savePoint
parametru Save metody.
Musíte explicitně potvrdit nebo vrátit zpět transakce pomocí Commit metody nebo Rollback . Chcete-li se ujistit, že model správy transakcí SQL Server funguje správně, nepoužívejte jiné modely správy transakcí, například model poskytovaný SQL Server.
Poznámka
Jakmile je transakce potvrzena nebo vrácena zpět, úroveň izolace transakce zůstane zachována pro všechny následné příkazy, které jsou v režimu automatického připojení (výchozí SQL Server). To může vést k neočekávaným výsledkům, jako je úroveň izolace OPAKOVATELNÉHO ČTENÍ, která přetrvává a zablokuje ostatní uživatele mimo řádek. Pokud chcete obnovit výchozí úroveň izolace (READ COMMITTED), spusťte příkaz Transact-SQL SET TRANSACTION ISOLATION LEVEL READ COMMITTED nebo okamžitě SqlTransaction.Commitzavolat SqlConnection.BeginTransaction . Další informace o úrovních izolace SQL Server najdete v tématu Úrovně izolace transakcí.
Další informace o transakcích SQL Server najdete v tématu Transakce (Transact-SQL).
Upozornění
Když dotaz vrátí velké množství dat a volá BeginTransaction
, SqlException vyvolá se , protože SQL Server neumožňuje paralelní transakce při použití mars. Chcete-li se vyhnout tomuto problému, vždy přidružte transakci k příkazu, připojení nebo obojím před otevřením libovolného čtenáře.
Viz také
- Transakce (ADO.NET)
- Připojení ke zdroji dat (ADO.NET)
- Použití zprostředkovatele dat rozhraní .NET Framework pro SQL Server
- Přehled ADO.NET
Platí pro
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu:Odeslat a zobrazit názory pro