SqlConnection.BeginTransaction Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Запускает транзакцию базы данных.
Перегрузки
| Имя | Описание |
|---|---|
| BeginTransaction() |
Запускает транзакцию базы данных. |
| BeginTransaction(IsolationLevel) |
Запускает транзакцию базы данных с указанным уровнем изоляции. |
| BeginTransaction(String) |
Запускает транзакцию базы данных с указанным именем транзакции. |
| BeginTransaction(IsolationLevel, String) |
Запускает транзакцию базы данных с указанным уровнем изоляции и именем транзакции. |
BeginTransaction()
Запускает транзакцию базы данных.
public:
System::Data::SqlClient::SqlTransaction ^ BeginTransaction();
public System.Data.SqlClient.SqlTransaction BeginTransaction();
member this.BeginTransaction : unit -> System.Data.SqlClient.SqlTransaction
override this.BeginTransaction : unit -> System.Data.SqlClient.SqlTransaction
Public Function BeginTransaction () As SqlTransaction
Возвращаемое значение
Объект, представляющий новую транзакцию.
Исключения
Параллельные транзакции не допускаются при использовании нескольких активных результирующих наборов (MARS).
Параллельные транзакции не поддерживаются.
Примеры
В следующем примере создается SqlConnection и a SqlTransaction. В нем также показано, как использовать BeginTransactionметоды, а Commitтакже методы.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
Комментарии
Эта команда сопоставляется с SQL Server реализацией BEGIN TRANSACTION.
Необходимо явно зафиксировать или откатить транзакцию с помощью Commit метода или Rollback метода. Чтобы убедиться, что Data Provider .NET Framework для модели управления транзакциями SQL Server выполняются правильно, избегайте использования других моделей управления транзакциями, таких как модель, предоставляемая SQL Server.
Note
Если уровень изоляции не указан, используется уровень изоляции по умолчанию. Чтобы указать уровень изоляции с BeginTransaction помощью метода, используйте перегрузку, принимающую iso параметр (BeginTransaction). Уровень изоляции для транзакции сохраняется после завершения транзакции и пока подключение не будет закрыто или удалено. Установка уровня изоляции на моментальный снимок в базе данных, где уровень изоляции моментальных снимков не включен, не вызывает исключения. Транзакция завершится с помощью уровня изоляции по умолчанию.
Предостережение
Если транзакция запущена и на сервере возникает ошибка уровня 16 или выше, транзакция не будет откатена до Read вызова метода. Исключение не возникает в ExecuteReader.
Предостережение
Когда запрос возвращает большой объем данных и вызывает BeginTransaction, возникает исключение SqlException, так как SQL Server не разрешает параллельные транзакции при использовании MARS. Чтобы избежать этой проблемы, всегда свяжите транзакцию с командой, подключением или обоими перед открытием любого средства чтения.
Дополнительные сведения о транзакциях SQL Server см. в разделе Transactions (Transact-SQL).
См. также раздел
- Транзакции и параллельность
- Подключение к источнику данных в ADO.NET
- SQL Server и ADO.NET
- Общие сведения об ADO.NET
Применяется к
BeginTransaction(IsolationLevel)
Запускает транзакцию базы данных с указанным уровнем изоляции.
public:
System::Data::SqlClient::SqlTransaction ^ BeginTransaction(System::Data::IsolationLevel iso);
public System.Data.SqlClient.SqlTransaction BeginTransaction(System.Data.IsolationLevel iso);
member this.BeginTransaction : System.Data.IsolationLevel -> System.Data.SqlClient.SqlTransaction
override this.BeginTransaction : System.Data.IsolationLevel -> System.Data.SqlClient.SqlTransaction
Public Function BeginTransaction (iso As IsolationLevel) As SqlTransaction
Параметры
- iso
- IsolationLevel
Уровень изоляции, в котором должна выполняться транзакция.
Возвращаемое значение
Объект, представляющий новую транзакцию.
Исключения
Параллельные транзакции не допускаются при использовании нескольких активных результирующих наборов (MARS).
Параллельные транзакции не поддерживаются.
Примеры
В следующем примере создается SqlConnection и a SqlTransaction. В нем также показано, как использовать BeginTransactionметоды, а Commitтакже методы.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
Комментарии
Эта команда сопоставляется с SQL Server реализацией BEGIN TRANSACTION.
Необходимо явно зафиксировать или откатить транзакцию с помощью Commit метода или Rollback метода. Чтобы убедиться, что Data Provider .NET Framework для модели управления транзакциями SQL Server выполняются правильно, избегайте использования других моделей управления транзакциями, таких как модель, предоставляемая SQL Server.
Note
После фиксации или отката транзакции уровень изоляции транзакции сохраняется для всех последующих команд, которые находятся в режиме автоматической фиксации (по умолчанию SQL Server). Это может привести к непредвиденным результатам, таким как уровень изоляции повторяемого чтения и блокировка других пользователей из строки. Чтобы сбросить уровень изоляции на уровень изоляции по умолчанию (READ COMMITTED), выполните инструкцию Transact-SQL SET TRANSACTION ISOLATION LEVEL READ COMMITTED или вызовите SqlConnection.BeginTransaction, за которым следует немедленно SqlTransaction.Commit. Дополнительные сведения о уровнях изоляции SQL Server см. в разделе Transaction Isolation Levels.
Дополнительные сведения о транзакциях SQL Server см. в разделе Transactions (Transact-SQL).
Предостережение
Когда запрос возвращает большой объем данных и вызывает BeginTransaction, возникает исключение SqlException, так как SQL Server не разрешает параллельные транзакции при использовании MARS. Чтобы избежать этой проблемы, всегда свяжите транзакцию с командой, подключением или обоими перед открытием любого средства чтения.
См. также раздел
- Transactions (ADO.NET)
- Подключение к источнику данных (ADO.NET)
- Использование поставщика данных .NET Framework для SQL Server
- Общие сведения об ADO.NET
Применяется к
BeginTransaction(String)
Запускает транзакцию базы данных с указанным именем транзакции.
public:
System::Data::SqlClient::SqlTransaction ^ BeginTransaction(System::String ^ transactionName);
public System.Data.SqlClient.SqlTransaction BeginTransaction(string transactionName);
member this.BeginTransaction : string -> System.Data.SqlClient.SqlTransaction
override this.BeginTransaction : string -> System.Data.SqlClient.SqlTransaction
Public Function BeginTransaction (transactionName As String) As SqlTransaction
Параметры
- transactionName
- String
Имя транзакции.
Возвращаемое значение
Объект, представляющий новую транзакцию.
Исключения
Параллельные транзакции не допускаются при использовании нескольких активных результирующих наборов (MARS).
Параллельные транзакции не поддерживаются.
Примеры
В следующем примере создается SqlConnection и a SqlTransaction. В нем также показано, как использовать BeginTransactionметоды, а Commitтакже методы.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
Комментарии
Эта команда сопоставляется с SQL Server реализацией BEGIN TRANSACTION.
Длина transactionName параметра не должна превышать 32 символов; в противном случае создается исключение.
Значение в параметре transactionName можно использовать в последующих вызовах Rollback и в savePoint параметре Save метода.
Необходимо явно зафиксировать или откатить транзакцию с помощью Commit метода или Rollback метода. Чтобы убедиться, что Data Provider .NET Framework для модели управления транзакциями SQL Server выполняются правильно, избегайте использования других моделей управления транзакциями, таких как модель, предоставляемая SQL Server.
Дополнительные сведения о транзакциях SQL Server см. в разделе Transactions (Transact-SQL).
Предостережение
Когда запрос возвращает большой объем данных и вызывает BeginTransaction, возникает исключение SqlException, так как SQL Server не разрешает параллельные транзакции при использовании MARS. Чтобы избежать этой проблемы, всегда свяжите транзакцию с командой, подключением или обоими перед открытием любого средства чтения.
См. также раздел
- Transactions (ADO.NET)
- Подключение к источнику данных (ADO.NET)
- Использование поставщика данных .NET Framework для SQL Server
- Общие сведения об ADO.NET
Применяется к
BeginTransaction(IsolationLevel, String)
Запускает транзакцию базы данных с указанным уровнем изоляции и именем транзакции.
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);
member this.BeginTransaction : System.Data.IsolationLevel * string -> System.Data.SqlClient.SqlTransaction
override this.BeginTransaction : System.Data.IsolationLevel * string -> System.Data.SqlClient.SqlTransaction
Public Function BeginTransaction (iso As IsolationLevel, transactionName As String) As SqlTransaction
Параметры
- iso
- IsolationLevel
Уровень изоляции, в котором должна выполняться транзакция.
- transactionName
- String
Имя транзакции.
Возвращаемое значение
Объект, представляющий новую транзакцию.
Исключения
Параллельные транзакции не допускаются при использовании нескольких активных результирующих наборов (MARS).
Параллельные транзакции не поддерживаются.
Примеры
В следующем примере создается SqlConnection и a SqlTransaction. В нем также показано, как использовать BeginTransactionметоды, а Commitтакже методы.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
Комментарии
Эта команда сопоставляется с SQL Server реализацией BEGIN TRANSACTION.
Значение в параметре transactionName можно использовать в последующих вызовах Rollback и в savePoint параметре Save метода.
Необходимо явно зафиксировать или откатить транзакцию с помощью Commit метода или Rollback метода. Чтобы убедиться, что модель управления транзакциями SQL Server работает правильно, избегайте использования других моделей управления транзакциями, таких как модель, предоставляемая SQL Server.
Note
После фиксации или отката транзакции уровень изоляции транзакции сохраняется для всех последующих команд, которые находятся в режиме автоматической фиксации (по умолчанию SQL Server). Это может привести к непредвиденным результатам, таким как уровень изоляции повторяемого чтения и блокировка других пользователей из строки. Чтобы сбросить уровень изоляции на уровень изоляции по умолчанию (READ COMMITTED), выполните инструкцию Transact-SQL SET TRANSACTION ISOLATION LEVEL READ COMMITTED или вызовите SqlConnection.BeginTransaction, за которым следует немедленно SqlTransaction.Commit. Дополнительные сведения о уровнях изоляции SQL Server см. в разделе Transaction Isolation Levels.
Дополнительные сведения о транзакциях SQL Server см. в разделе Transactions (Transact-SQL).
Предостережение
Когда запрос возвращает большой объем данных и вызывает BeginTransaction, возникает исключение SqlException, так как SQL Server не разрешает параллельные транзакции при использовании MARS. Чтобы избежать этой проблемы, всегда свяжите транзакцию с командой, подключением или обоими перед открытием любого средства чтения.
См. также раздел
- Transactions (ADO.NET)
- Подключение к источнику данных (ADO.NET)
- Использование поставщика данных .NET Framework для SQL Server
- Общие сведения об ADO.NET