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