트랜잭션이 커밋되기 전에 트랜잭션에 할당 된 명령을 처리 할 수 있습니까? 다음 코드를 직접 테스트했는데 제대로 작동 한 것 같습니다. 그러나 이것은 아주 작은 예입니다. 따라서 누군가가 확실하게 알고있는 경우 확인을 찾고 있습니다.SqlCommand.Dispose() before SqlTransaction.Commit()?
internal static void TestTransaction()
{
try
{
Program.dbConnection.Open();
using (SqlTransaction transaction = Program.dbConnection.BeginTransaction())
{
Boolean doRollback = false;
for (int i = 0; i < 10; i++)
{
using (SqlCommand cmd = new SqlCommand("INSERT INTO [testdb].[dbo].[transactiontest] (testvalcol) VALUES (@index)", Program.dbConnection, transaction))
{
cmd.Parameters.AddWithValue("@index", i);
try
{
cmd.ExecuteNonQuery();
}
catch (SqlException)
{
doRollback = true;
break;
}
}
}
if (doRollback)
transaction.Rollback();
else
transaction.Commit();
}
}
finally
{
Program.dbConnection.Close();
}
}
커밋을 수행 사용법() {}을 감싸는 유일한 테스트 방법이기 때문에 Command 객체를 폐기해야합니다. 무슨 말을하는지 사용하지 않고 그것을 시도하고 결과를 볼 수 있지만 트랜잭션이 연결뿐만 아니라 명령에 묶여 있다면 .. 그러면 치명적인 오류가 발생합니다 .. – MethodMan