SqlConnection.BeginTransaction Metod
Definition
Viktigt
En del information gäller för förhandsversionen av en produkt och kan komma att ändras avsevärt innan produkten blir allmänt tillgänglig. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, avseende informationen som visas här.
Startar en databastransaktion.
Överlagringar
| Name | Description |
|---|---|
| BeginTransaction() |
Startar en databastransaktion. |
| BeginTransaction(IsolationLevel) |
Startar en databastransaktion med den angivna isoleringsnivån. |
| BeginTransaction(String) |
Startar en databastransaktion med det angivna transaktionsnamnet. |
| BeginTransaction(IsolationLevel, String) |
Startar en databastransaktion med den angivna isoleringsnivån och transaktionsnamnet. |
BeginTransaction()
Startar en databastransaktion.
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
Returer
Ett objekt som representerar den nya transaktionen.
Undantag
Parallella transaktioner tillåts inte när du använder flera aktiva resultatuppsättningar (MARS).
Parallella transaktioner stöds inte.
Exempel
I följande exempel skapas en SqlConnection och en SqlTransaction. Det visar också hur du använder BeginTransactionmetoderna , a Commitoch 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
Kommentarer
Det här kommandot mappar till SQL Server implementeringen av BEGIN TRANSACTION.
Du måste uttryckligen checka in eller återställa transaktionen med hjälp av Commit metoden eller Rollback . För att säkerställa att .NET Framework-Data Provider för SQL Server transaktionshanteringsmodell fungerar korrekt bör du undvika att använda andra transaktionshanteringsmodeller, till exempel den som tillhandahålls av SQL Server.
Note
Om du inte anger någon isoleringsnivå används standardisoleringsnivån. Om du vill ange en isoleringsnivå med BeginTransaction metoden använder du den överlagring som tar parametern iso (BeginTransaction). Isoleringsnivån för en transaktion kvarstår när transaktionen har slutförts och tills anslutningen stängs eller tas bort. Att ställa in isoleringsnivån på Ögonblicksbild i en databas där isoleringsnivån för ögonblicksbilder inte är aktiverad utlöser inget undantag. Transaktionen slutförs med standardisoleringsnivån.
Försiktighet
Om en transaktion startas och ett fel på nivå 16 eller högre inträffar på servern återställs inte transaktionen förrän Read metoden anropas. Inget undantag utlöses på ExecuteReader.
Försiktighet
När frågan returnerar en stor mängd data och anropar BeginTransaction genereras en SqlException eftersom SQL Server inte tillåter parallella transaktioner när MARS används. Undvik det här problemet genom att alltid associera en transaktion med kommandot, anslutningen eller båda innan någon läsare är öppen.
Mer information om SQL Server transaktioner finns i Transactions (Transact-SQL).
Se även
- Transaktioner och samtidighet
- Ansluta till en datakälla i ADO.NET
- SQL Server och ADO.NET
- översikt över ADO.NET
Gäller för
BeginTransaction(IsolationLevel)
Startar en databastransaktion med den angivna isoleringsnivån.
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
Parametrar
- iso
- IsolationLevel
Isoleringsnivån som transaktionen ska köras under.
Returer
Ett objekt som representerar den nya transaktionen.
Undantag
Parallella transaktioner tillåts inte när du använder flera aktiva resultatuppsättningar (MARS).
Parallella transaktioner stöds inte.
Exempel
I följande exempel skapas en SqlConnection och en SqlTransaction. Det visar också hur du använder BeginTransactionmetoderna , a Commitoch 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
Kommentarer
Det här kommandot mappar till SQL Server implementeringen av BEGIN TRANSACTION.
Du måste uttryckligen checka in eller återställa transaktionen med hjälp av Commit metoden eller Rollback . För att säkerställa att .NET Framework-Data Provider för SQL Server transaktionshanteringsmodell fungerar korrekt bör du undvika att använda andra transaktionshanteringsmodeller, till exempel den som tillhandahålls av SQL Server.
Note
När en transaktion har checkats in eller återställts sparas isoleringsnivån för transaktionen för alla efterföljande kommandon som är i automatiskt återtagandeläge (SQL Server standard). Detta kan ge oväntade resultat, till exempel en isoleringsnivå för REPEATABLE READ som bevarar och låser andra användare från en rad. Om du vill återställa isoleringsnivån till standardinställningen (READ COMMITTED) kör du instruktionen Transact-SQL SET TRANSACTION ISOLATION LEVEL READ COMMITTED eller anropar SqlConnection.BeginTransaction följt omedelbart av SqlTransaction.Commit. Mer information om SQL Server isoleringsnivåer finns i Transaction Isolation Levels.
Mer information om SQL Server transaktioner finns i Transactions (Transact-SQL).
Försiktighet
När frågan returnerar en stor mängd data och anropar BeginTransaction genereras en SqlException eftersom SQL Server inte tillåter parallella transaktioner när MARS används. Undvik det här problemet genom att alltid associera en transaktion med kommandot, anslutningen eller båda innan någon läsare är öppen.
Se även
- Transactions (ADO.NET)
- Ansluta till en datakälla (ADO.NET)
- Använder .NET Framework Data Provider för SQL Server
- översikt över ADO.NET
Gäller för
BeginTransaction(String)
Startar en databastransaktion med det angivna transaktionsnamnet.
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
Parametrar
- transactionName
- String
Namnet på transaktionen.
Returer
Ett objekt som representerar den nya transaktionen.
Undantag
Parallella transaktioner tillåts inte när du använder flera aktiva resultatuppsättningar (MARS).
Parallella transaktioner stöds inte.
Exempel
I följande exempel skapas en SqlConnection och en SqlTransaction. Det visar också hur du använder BeginTransactionmetoderna , a Commitoch 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
Kommentarer
Det här kommandot mappar till SQL Server implementeringen av BEGIN TRANSACTION.
Parameterns transactionName längd får inte överstiga 32 tecken. Annars genereras ett undantag.
Värdet i parametern transactionName kan användas i senare anrop till Rollback och i parametern savePoint för Save metoden.
Du måste uttryckligen checka in eller återställa transaktionen med hjälp av Commit metoden eller Rollback . För att säkerställa att .NET Framework-Data Provider för SQL Server transaktionshanteringsmodell fungerar korrekt bör du undvika att använda andra transaktionshanteringsmodeller, till exempel den som tillhandahålls av SQL Server.
Mer information om SQL Server transaktioner finns i Transactions (Transact-SQL).
Försiktighet
När frågan returnerar en stor mängd data och anropar BeginTransaction genereras en SqlException eftersom SQL Server inte tillåter parallella transaktioner när MARS används. Undvik det här problemet genom att alltid associera en transaktion med kommandot, anslutningen eller båda innan någon läsare är öppen.
Se även
- Transactions (ADO.NET)
- Ansluta till en datakälla (ADO.NET)
- Använder .NET Framework Data Provider för SQL Server
- översikt över ADO.NET
Gäller för
BeginTransaction(IsolationLevel, String)
Startar en databastransaktion med den angivna isoleringsnivån och transaktionsnamnet.
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
Parametrar
- iso
- IsolationLevel
Isoleringsnivån som transaktionen ska köras under.
- transactionName
- String
Namnet på transaktionen.
Returer
Ett objekt som representerar den nya transaktionen.
Undantag
Parallella transaktioner tillåts inte när du använder flera aktiva resultatuppsättningar (MARS).
Parallella transaktioner stöds inte.
Exempel
I följande exempel skapas en SqlConnection och en SqlTransaction. Det visar också hur du använder BeginTransactionmetoderna , a Commitoch 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
Kommentarer
Det här kommandot mappar till SQL Server implementeringen av BEGIN TRANSACTION.
Värdet i parametern transactionName kan användas i senare anrop till Rollback och i parametern savePoint för Save metoden.
Du måste uttryckligen checka in eller återställa transaktionen med hjälp av Commit metoden eller Rollback . För att säkerställa att SQL Server transaktionshanteringsmodell fungerar korrekt bör du undvika att använda andra transaktionshanteringsmodeller, till exempel den som tillhandahålls av SQL Server.
Note
När en transaktion har checkats in eller återställts sparas isoleringsnivån för transaktionen för alla efterföljande kommandon som är i automatiskt återtagandeläge (SQL Server standard). Detta kan ge oväntade resultat, till exempel en isoleringsnivå för REPEATABLE READ som bevarar och låser andra användare från en rad. Om du vill återställa isoleringsnivån till standardinställningen (READ COMMITTED) kör du instruktionen Transact-SQL SET TRANSACTION ISOLATION LEVEL READ COMMITTED eller anropar SqlConnection.BeginTransaction följt omedelbart av SqlTransaction.Commit. Mer information om SQL Server isoleringsnivåer finns i Transaction Isolation Levels.
Mer information om SQL Server transaktioner finns i Transactions (Transact-SQL).
Försiktighet
När frågan returnerar en stor mängd data och anropar BeginTransaction genereras en SqlException eftersom SQL Server inte tillåter parallella transaktioner när MARS används. Undvik det här problemet genom att alltid associera en transaktion med kommandot, anslutningen eller båda innan någon läsare är öppen.
Se även
- Transactions (ADO.NET)
- Ansluta till en datakälla (ADO.NET)
- Använder .NET Framework Data Provider för SQL Server
- översikt över ADO.NET