Tôi gặp lỗi sau một lần trong đơn đăng ký của mình.SQLTransaction đã hoàn thành lỗi
Thao tác SQLTransaction này đã hoàn tất; nó không còn có thể sử dụng được
Dấu vết ngăn được đính kèm bên dưới - Nó nói về Zombie Check
và Rollback
.
Lỗi trong mã là gì?
Lưu ý: Lỗi này chỉ xảy ra một lần.
CẬP NHẬT
Từ MSDN - SqlTransaction.Rollback Method
Một Rollback tạo ra một InvalidOperationException nếu kết nối bị chấm dứt hoặc nếu giao dịch đã được cuộn lại trên máy chủ.
Từ Zombie check on Transaction - Error
Một trong những lý do thường gặp nhất Tôi đã thấy lỗi này hiển thị trong ứng dụng khác nhau là, chia sẻ SqlConnection trên ứng dụng của chúng tôi.
MÃ
public int SaveUserLogOnInfo(int empID)
{
int? sessionID = null;
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
SqlTransaction transaction = null;
try
{
transaction = connection.BeginTransaction();
sessionID = GetSessionIDForAssociate(connection, empID, transaction);
//Other Code
//Commit
transaction.Commit();
}
catch
{
//Rollback
if (transaction != null)
{
transaction.Rollback();
transaction.Dispose();
transaction = null;
}
//Throw exception
throw;
}
finally
{
if (transaction != null)
{
transaction.Dispose();
}
}
}
return Convert.ToInt32(sessionID,CultureInfo.InvariantCulture);
}
Stack Trace
THAM KHẢO:
- What is zombie transaction?
- Zombie check on Transaction - Error
- SqlTransaction has completed
- http://forums.asp.net/t/1579684.aspx/1
- "This SqlTransaction has completed; it is no longer usable."... configuration error?
- dotnet.sys-con.com - SqlClient Connection Pooling Exposed
- Thread abort leaves zombie transactions and broken SqlConnection
Ngoại lệ khiến mã của bạn tiếp cận 'bắt' là gì? – Maarten
Trong trường hợp này, bạn nên sử dụng câu lệnh 'sử dụng' cho giao dịch của mình. Xem http://stackoverflow.com/questions/1127830/why-use-a-using-statement-with-a-sqltransaction – Maarten
@Maarten công bằng, OP * không * đảm bảo rằng nó được xử lý; nhưng tôi đồng ý rằng * not * bằng cách sử dụng 'using' làm cho nó quá phức tạp –