私はSqlTransaction
をC#で実装して、トランザクションのコミットとロールバックを開始しました。すべてがうまくいっていますが、トランザクション中に接続されているテーブルにアクセスしているときに問題があります。 トランザクション中にテーブルを読み取ることができませんでした(これらのテーブルはトランザクション中です)。これについて調べているうちに、排他的ロックが原因で起こることがわかりました。その後、そのデータの後続の選択は、排他ロックが解除されるのを待たなければなりません。その後、私はSqlTransaction
によって提供されるすべての分離レベルを通過しましたが、機能しませんでした。 他のユーザーがそのテーブルにアクセスしてデータを読み取れるように、トランザクション中に排他ロックを解除する必要があります。 これを達成する方法はありますか? ありがとうございます。Sqlトランザクションの分離レベル
は、ここでこのコードは正常に動作しているトランザクション
try
{
SqlTransaction transaction = null;
using (SqlConnection connection=new SqlConnection(Connection.ConnectionString))
{
connection.Open();
transaction=connection.BeginTransaction(IsolationLevel.Snapshot,"FaresheetTransaction");
//Here all transaction occurs
if (transaction.Connection != null)
{
transaction.Commit();
transaction.Dispose();
}
}
}
catch (Exception ex)
{
if (transaction.Connection != null)
transaction.Rollback();
transaction.Dispose();
} `
のための私のC#のコードだが、問題は、私はトランザクションの期間中テーブルのデータ(トランザクション中にアクセスされたもの)にアクセスするとき。テーブルはアプリケーションの他の部分からアクセスされています。したがって、テーブルからデータを読み込もうとすると、例外がスローされます。
を助けるならば、それはまだ不確実ですので、これは、SQL Server 2008のは、あなたの意図はここで何ですか?更新時にノーロックがかかりませんか?または他の読者がロックを無視するために(非常に良い理由のためにそこにある) –
私は他のユーザーのトランザクションテーブルをロックしたくありません....トランザクションはトランザクションの時に、数十万のデータがテーブルに挿入されるので、おそらく長い時間がかかります...だから、tranの期間私は他のユーザーがそのテーブルにアクセスしてデータを読み取ることができるようにしたい... –