SqlConnection.BeginTransaction メソッド
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
データベース トランザクションを開始します。
オーバーロード
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。 また、 メソッド、、 メソッドのBeginTransactionCommitRollback使用方法も示します。
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実装にマップされます。
または Rollback メソッドを使用して、トランザクションを明示的にコミットまたはロールバックするCommit必要があります。 SQL Server トランザクション管理モデルの.NET Framework データ プロバイダーが正しく実行されるようにするには、SQL Serverによって提供されるトランザクション管理モデルなど、他のトランザクション管理モデルを使用しないようにします。
注意
分離レベルを指定しない場合は、既定の分離レベルが使用されます。 メソッドで分離レベルをBeginTransaction指定するには、 パラメーター (BeginTransaction) を受け取るオーバーロードをiso
使用します。 トランザクションに設定された分離レベルは、トランザクションが完了した後、接続が閉じられるか破棄されるまで保持されます。 スナップショット 分離レベルが有効になっていないデータベースで分離レベルを Snapshot に設定しても、例外はスローされません。 トランザクションは、既定の分離レベルを使用して完了します。
注意事項
トランザクションが開始され、サーバーでレベル 16 以上のエラーが発生した場合、メソッドが呼び出されるまで Read トランザクションはロールバックされません。 ExecuteReader で例外はスローされません。
注意事項
クエリが大量のデータを返し、 をSqlException呼び出BeginTransaction
すと、 がスローされます。これは、MARS を使用するときに、SQL Serverでは並列トランザクションが許可されないためです。 この問題を回避するには、リーダーを開く前に、常にトランザクションをコマンド、接続、またはその両方に関連付けます。
SQL Server トランザクションの詳細については、「トランザクション (Transact-SQL)」を参照してください。
こちらもご覧ください
適用対象
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。 また、 メソッド、、 メソッドのBeginTransactionCommitRollback使用方法も示します。
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実装にマップされます。
または Rollback メソッドを使用して、トランザクションを明示的にコミットまたはロールバックするCommit必要があります。 SQL Server トランザクション管理モデルの.NET Framework データ プロバイダーが正しく実行されるようにするには、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)」を参照してください。
注意事項
クエリが大量のデータを返し、 をSqlException呼び出BeginTransaction
すと、 がスローされます。これは、MARS を使用するときに、SQL Serverでは並列トランザクションが許可されないためです。 この問題を回避するには、リーダーを開く前に、常にトランザクションをコマンド、接続、またはその両方に関連付けます。
こちらもご覧ください
適用対象
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。 また、 メソッド、、 メソッドのBeginTransactionCommitRollback使用方法も示します。
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
使用できます。
または Rollback メソッドを使用して、トランザクションを明示的にコミットまたはロールバックするCommit必要があります。 SQL Server トランザクション管理モデルの.NET Framework データ プロバイダーが正しく実行されるようにするには、SQL Serverによって提供されるトランザクション管理モデルなど、他のトランザクション管理モデルを使用しないようにします。
SQL Server トランザクションの詳細については、「トランザクション (Transact-SQL)」を参照してください。
注意事項
クエリが大量のデータを返し、 をSqlException呼び出BeginTransaction
すと、 がスローされます。これは、MARS を使用するときに、SQL Serverでは並列トランザクションが許可されないためです。 この問題を回避するには、リーダーを開く前に、常にトランザクションをコマンド、接続、またはその両方に関連付けます。
こちらもご覧ください
適用対象
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。 また、 メソッド、、 メソッドのBeginTransactionCommitRollback使用方法も示します。
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
使用できます。
または Rollback メソッドを使用して、トランザクションを明示的にコミットまたはロールバックするCommit必要があります。 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)」を参照してください。
注意事項
クエリが大量のデータを返し、 をSqlException呼び出BeginTransaction
すと、 がスローされます。これは、MARS を使用するときに、SQL Serverでは並列トランザクションが許可されないためです。 この問題を回避するには、リーダーを開く前に、常にトランザクションをコマンド、接続、またはその両方に関連付けます。
こちらもご覧ください
適用対象
.NET