SqlConnection.BeginTransaction メソッド
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
データベース トランザクションを開始します。
オーバーロード
| 名前 | 説明 |
|---|---|
| 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 と 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
注釈
このコマンドは、BEGIN TRANSACTION のSQL Server実装にマップされます。
CommitメソッドまたはRollbackメソッドを使用して、トランザクションを明示的にコミットまたはロールバックする必要があります。 SQL Server トランザクション管理モデルの .NET Framework Data Providerが正しく実行されるようにするには、SQL Serverによって提供されるトランザクション管理モデルなど、他のトランザクション管理モデルを使用しないようにします。
Note
分離レベルを指定しない場合は、既定の分離レベルが使用されます。
BeginTransaction メソッドで分離レベルを指定するには、iso パラメーター (BeginTransaction) を受け取るオーバーロードを使用します。 トランザクションに設定された分離レベルは、トランザクションが完了した後、接続が閉じられるか破棄されるまで保持されます。 スナップショット分離レベルが有効になっていない データベースで分離 レベルを Snapshot に設定しても、例外はスローされません。 トランザクションは、既定の分離レベルを使用して完了します。
Caution
トランザクションが開始され、サーバーでレベル 16 以上のエラーが発生した場合、 Read メソッドが呼び出されるまでトランザクションはロールバックされません。 ExecuteReader で例外はスローされません。
Caution
クエリが大量のデータを返し、BeginTransaction を呼び出すと、MARS の使用時に並列トランザクションが許可されないため、SQL Server SqlException がスローされます。 この問題を回避するには、リーダーを開く前に、常にトランザクションをコマンド、接続、またはその両方に関連付けます。
SQL Server トランザクションの詳細については、「Transactions (Transact-SQL)」を参照してください。
こちらもご覧ください
適用対象
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 と 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
注釈
このコマンドは、BEGIN TRANSACTION のSQL Server実装にマップされます。
CommitメソッドまたはRollbackメソッドを使用して、トランザクションを明示的にコミットまたはロールバックする必要があります。 SQL Server トランザクション管理モデルの .NET Framework Data Providerが正しく実行されるようにするには、SQL Serverによって提供されるトランザクション管理モデルなど、他のトランザクション管理モデルを使用しないようにします。
Note
トランザクションがコミットまたはロールバックされた後、トランザクションの分離レベルは、自動コミット モード (既定のSQL Server) にある後続のすべてのコマンドに対して保持されます。 これにより、REPEATABLE READ の分離レベルが保持され、他のユーザーが行からロックされるなど、予期しない結果が生じる可能性があります。 分離レベルを既定値 (READ COMMITTED) にリセットするには、Transact-SQL SET TRANSACTION ISOLATION LEVEL READ COMMITTED ステートメントを実行するか、SqlConnection.BeginTransaction を呼び出し、その直後に SqlTransaction.Commit を呼び出します。 SQL Server分離レベルの詳細については、「Transaction 分離レベル」を参照してください。
SQL Server トランザクションの詳細については、「Transactions (Transact-SQL)」を参照してください。
Caution
クエリが大量のデータを返し、BeginTransaction を呼び出すと、MARS の使用時に並列トランザクションが許可されないため、SQL Server SqlException がスローされます。 この問題を回避するには、リーダーを開く前に、常にトランザクションをコマンド、接続、またはその両方に関連付けます。
こちらもご覧ください
- Transactions (ADO.NET))
- データ ソースへの接続 (ADO.NET)
- .NET Framework Data Provider for 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 と 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
注釈
このコマンドは、BEGIN TRANSACTION のSQL Server実装にマップされます。
transactionName パラメーターの長さは 32 文字を超えないようにしてください。それ以外の場合は例外がスローされます。
transactionName パラメーターの値は、後でRollbackする呼び出しや、Save メソッドの savePoint パラメーターで使用できます。
CommitメソッドまたはRollbackメソッドを使用して、トランザクションを明示的にコミットまたはロールバックする必要があります。 SQL Server トランザクション管理モデルの .NET Framework Data Providerが正しく実行されるようにするには、SQL Serverによって提供されるトランザクション管理モデルなど、他のトランザクション管理モデルを使用しないようにします。
SQL Server トランザクションの詳細については、「Transactions (Transact-SQL)」を参照してください。
Caution
クエリが大量のデータを返し、BeginTransaction を呼び出すと、MARS の使用時に並列トランザクションが許可されないため、SQL Server SqlException がスローされます。 この問題を回避するには、リーダーを開く前に、常にトランザクションをコマンド、接続、またはその両方に関連付けます。
こちらもご覧ください
- Transactions (ADO.NET))
- データ ソースへの接続 (ADO.NET)
- .NET Framework Data Provider for 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 と 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
注釈
このコマンドは、BEGIN TRANSACTION のSQL Server実装にマップされます。
transactionName パラメーターの値は、後でRollbackする呼び出しや、Save メソッドの savePoint パラメーターで使用できます。
CommitメソッドまたはRollbackメソッドを使用して、トランザクションを明示的にコミットまたはロールバックする必要があります。 SQL Server トランザクション管理モデルが正しく実行されるようにするには、SQL Serverによって提供されるトランザクション管理モデルなど、他のトランザクション管理モデルを使用しないようにします。
Note
トランザクションがコミットまたはロールバックされた後、トランザクションの分離レベルは、自動コミット モード (既定のSQL Server) にある後続のすべてのコマンドに対して保持されます。 これにより、REPEATABLE READ の分離レベルが保持され、他のユーザーが行からロックされるなど、予期しない結果が生じる可能性があります。 分離レベルを既定値 (READ COMMITTED) にリセットするには、Transact-SQL SET TRANSACTION ISOLATION LEVEL READ COMMITTED ステートメントを実行するか、SqlConnection.BeginTransaction を呼び出し、その直後に SqlTransaction.Commit を呼び出します。 SQL Server分離レベルの詳細については、「Transaction 分離レベル」を参照してください。
SQL Server トランザクションの詳細については、「Transactions (Transact-SQL)」を参照してください。
Caution
クエリが大量のデータを返し、BeginTransaction を呼び出すと、MARS の使用時に並列トランザクションが許可されないため、SQL Server SqlException がスローされます。 この問題を回避するには、リーダーを開く前に、常にトランザクションをコマンド、接続、またはその両方に関連付けます。
こちらもご覧ください
- Transactions (ADO.NET))
- データ ソースへの接続 (ADO.NET)
- .NET Framework Data Provider for SQL Server の使用
- ADO.NET の概要