SqlConnection.BeginTransaction メソッド
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
オーバーロード
BeginTransaction() |
データベース トランザクションを開始します。 |
BeginTransaction(IsolationLevel) |
分離レベルを指定して、データベース トランザクションを開始します。 |
BeginTransaction(String) |
トランザクション名を指定して、データベース トランザクションを開始します。 |
BeginTransaction(IsolationLevel, String) |
分離レベルとトランザクション名を指定して、データベース トランザクションを開始します。 |
BeginTransaction()
データベース トランザクションを開始します。
public:
Microsoft::Data::SqlClient::SqlTransaction ^ BeginTransaction();
public Microsoft.Data.SqlClient.SqlTransaction BeginTransaction ();
override this.BeginTransaction : unit -> Microsoft.Data.SqlClient.SqlTransaction
Public Function BeginTransaction () As SqlTransaction
戻り値
新しいトランザクションを表すオブジェクト。
例外
並列トランザクションは、複数のアクティブな結果セット (MARS) を使用する場合には使用できません。
並列トランザクションはサポートされていません。
例
次の例では、 と を SqlConnection 作成します SqlTransaction。 また、 メソッド、、 メソッドのBeginTransactionCommitRollback使用方法についても説明します。
using Microsoft.Data.SqlClient;
namespace Transaction1CS
{
class Program
{
static void Main()
{
string connectionString =
"Persist Security Info=False;Integrated Security=SSPI;database=Northwind;server=(local)";
ExecuteSqlTransaction(connectionString);
Console.ReadLine();
}
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);
}
}
}
}
}
}
注釈
このコマンドは、BEGIN TRANSACTION のSQL Server実装にマップされます。
または Rollback メソッドを使用して、トランザクションを明示的にコミットまたはロールバックするCommit必要があります。 .NET Framework Data Provider for SQL Server トランザクション管理モデルが正しく実行されるようにするには、SQL Serverによって提供されるトランザクション管理モデルなど、他のトランザクション管理モデルを使用しないようにします。
注意
分離レベルを指定しない場合は、既定の分離レベルが使用されます。 メソッドで分離レベルをBeginTransaction指定するには、 パラメーター (BeginTransaction) を受け取るオーバーロードをiso
使用します。 トランザクションの分離レベル セットは、トランザクションが完了した後、接続が閉じられるか破棄されるまで保持されます。 スナップショット分離レベルが有効になっていない データベースで分離 レベルを Snapshot に設定しても、例外はスローされません。 トランザクションは、既定の分離レベルを使用して完了します。
注意事項
トランザクションが開始され、サーバーでレベル 16 以上のエラーが発生した場合、メソッドが呼び出されるまで Read トランザクションはロールバックされません。 ExecuteReader で例外はスローされません。
注意事項
クエリが大量のデータを返し、 をSqlException呼び出BeginTransaction
すと、 がスローされます。これは、MARS を使用するときに、SQL Serverでは並列トランザクションが許可されないためです。 この問題を回避するには、リーダーを開く前に、常にトランザクションをコマンド、接続、またはその両方に関連付けます。
トランザクションのSQL Serverの詳細については、「トランザクション (Transact-SQL)」を参照してください。
適用対象
BeginTransaction(IsolationLevel)
分離レベルを指定して、データベース トランザクションを開始します。
public:
Microsoft::Data::SqlClient::SqlTransaction ^ BeginTransaction(System::Data::IsolationLevel iso);
public Microsoft.Data.SqlClient.SqlTransaction BeginTransaction (System.Data.IsolationLevel iso);
override this.BeginTransaction : System.Data.IsolationLevel -> Microsoft.Data.SqlClient.SqlTransaction
Public Function BeginTransaction (iso As IsolationLevel) As SqlTransaction
パラメーター
- iso
- IsolationLevel
トランザクションを実行する分離レベル。
戻り値
新しいトランザクションを表すオブジェクト。
例外
並列トランザクションは、複数のアクティブな結果セット (MARS) を使用する場合には使用できません。
並列トランザクションはサポートされていません。
例
次の例では、 と を SqlConnection 作成します SqlTransaction。 また、 メソッド、、 メソッドのBeginTransactionCommitRollback使用方法についても説明します。
using Microsoft.Data.SqlClient;
class Program
{
static void Main()
{
string connectionString =
"Persist Security Info=False;Integrated Security=SSPI;database=Northwind;server=(local)";
ExecuteSqlTransaction(connectionString);
Console.ReadLine();
}
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.");
}
}
}
}
注釈
このコマンドは、BEGIN TRANSACTION のSQL Server実装にマップされます。
または Rollback メソッドを使用して、トランザクションを明示的にコミットまたはロールバックするCommit必要があります。 .NET Framework Data Provider for 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では並列トランザクションが許可されないためです。 この問題を回避するには、リーダーを開く前に、常にトランザクションをコマンド、接続、またはその両方に関連付けます。
適用対象
BeginTransaction(String)
トランザクション名を指定して、データベース トランザクションを開始します。
public:
Microsoft::Data::SqlClient::SqlTransaction ^ BeginTransaction(System::String ^ transactionName);
public Microsoft.Data.SqlClient.SqlTransaction BeginTransaction (string transactionName);
override this.BeginTransaction : string -> Microsoft.Data.SqlClient.SqlTransaction
Public Function BeginTransaction (transactionName As String) As SqlTransaction
パラメーター
- transactionName
- String
トランザクションの名前です。
戻り値
新しいトランザクションを表すオブジェクト。
例外
並列トランザクションは、複数のアクティブな結果セット (MARS) を使用する場合には使用できません。
並列トランザクションはサポートされていません。
例
次の例では、 と を SqlConnection 作成します SqlTransaction。 また、 メソッド、、 メソッドのBeginTransactionCommitRollback使用方法についても説明します。
using Microsoft.Data.SqlClient;
namespace Transaction1CS
{
class Program
{
static void Main()
{
string connectionString =
"Persist Security Info=False;Integrated Security=SSPI;database=Northwind;server=(local)";
ExecuteSqlTransaction(connectionString);
Console.ReadLine();
}
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);
}
}
}
}
}
}
注釈
このコマンドは、BEGIN TRANSACTION のSQL Server実装にマップされます。
パラメーターの transactionName
長さは 32 文字以内にする必要があります。それ以外の場合は例外がスローされます。
パラメーターのtransactionName
値は、後で メソッドの パラメーターと savePoint
をRollback呼び出す場合にSave使用できます。
または Rollback メソッドを使用して、トランザクションを明示的にコミットまたはロールバックするCommit必要があります。 .NET Data Provider for SQL Server トランザクション管理モデルが正しく実行されるようにするには、他のトランザクション管理モデル (SQL Serverによって提供されるモデルなど) を使用しないようにします。
トランザクションのSQL Serverの詳細については、「トランザクション (Transact-SQL)」を参照してください。
注意事項
クエリが大量のデータを返し、 をSqlException呼び出BeginTransaction
すと、 がスローされます。これは、MARS を使用するときに、SQL Serverでは並列トランザクションが許可されないためです。 この問題を回避するには、リーダーを開く前に、常にトランザクションをコマンド、接続、またはその両方に関連付けます。
適用対象
BeginTransaction(IsolationLevel, String)
分離レベルとトランザクション名を指定して、データベース トランザクションを開始します。
public:
Microsoft::Data::SqlClient::SqlTransaction ^ BeginTransaction(System::Data::IsolationLevel iso, System::String ^ transactionName);
public Microsoft.Data.SqlClient.SqlTransaction BeginTransaction (System.Data.IsolationLevel iso, string transactionName);
override this.BeginTransaction : System.Data.IsolationLevel * string -> Microsoft.Data.SqlClient.SqlTransaction
Public Function BeginTransaction (iso As IsolationLevel, transactionName As String) As SqlTransaction
パラメーター
- iso
- IsolationLevel
トランザクションを実行する分離レベル。
- transactionName
- String
トランザクションの名前です。
戻り値
新しいトランザクションを表すオブジェクト。
例外
並列トランザクションは、複数のアクティブな結果セット (MARS) を使用する場合には使用できません。
並列トランザクションはサポートされていません。
例
次の例では、 と を SqlConnection 作成します SqlTransaction。 また、 メソッド、、 メソッドのBeginTransactionCommitRollback使用方法についても説明します。
using Microsoft.Data.SqlClient;
namespace Transaction1CS
{
class Program
{
static void Main()
{
string connectionString =
"Persist Security Info=False;Integrated Security=SSPI;database=Northwind;server=(local)";
ExecuteSqlTransaction(connectionString);
Console.ReadLine();
}
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.");
}
}
}
}
}
注釈
このコマンドは、BEGIN TRANSACTION のSQL Server実装にマップされます。
パラメーターのtransactionName
値は、後で メソッドの パラメーターと savePoint
をRollback呼び出す場合にSave使用できます。
または 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では並列トランザクションが許可されないためです。 この問題を回避するには、リーダーを開く前に、常にトランザクションをコマンド、接続、またはその両方に関連付けます。