2013-04-18 14 views
6

Tôi nhận được lỗi dưới đây trong khi chèn bản ghi vào cơ sở dữ liệu.Lỗi giao dịch Sql

System.Transactions.TransactionException: The operation is not valid for the state of the transaction. ---> System.TimeoutException: Transaction Timeout 
    --- End of inner exception stack trace --- 
    at System.Transactions.TransactionState.EnlistPromotableSinglePhase(InternalTransaction tx, IPromotableSinglePhaseNotification promotableSinglePhaseNotification, Transaction atomicTransaction) 
    at System.Transactions.Transaction.EnlistPromotableSinglePhase(IPromotableSinglePhaseNotification promotableSinglePhaseNotification) 
    at System.Data.SqlClient.SqlInternalConnection.EnlistNonNull(Transaction tx) 
    at System.Data.ProviderBase.DbConnectionInternal.ActivateConnection(Transaction transaction) 
    at System.Data.ProviderBase.DbConnectionPool.GetConnection(DbConnection owningObject) 
    at System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection) 
    at System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory) 
    at System.Data.SqlClient.SqlConnection.Open() 

Thực ra tôi đang chèn dữ liệu vào cơ sở dữ liệu theo phương thức phạm vi giao dịch, mã được mô tả bên dưới.

TransactionOptions tOptions = new TransactionOptions(); 
tOptions.IsolationLevel = IsolationLevel.ReadCommitted; 
tOptions.Timeout = TransactionManager.MaximumTimeout; 
using (var transactionScope = new TransactionScope(TransactionScopeOption.RequiresNew, tOptions)) 
{ 
} 

Có điều gì không chính xác trong tuyên bố ở trên không? Một điều cần lưu ý ở đây là tôi chèn dữ liệu hàng loạt trong ít nhất 10 bảng với nhiều bản ghi và bảng cũng cho phép chèn bản ghi trùng lặp với số lượng lớn, Cú pháp được sử dụng để đạt được điều này được đề cập bên dưới.

CREATE UNIQUE INDEX Index_a ON table1([c1], [c2]) WITH IGNORE_DUP_KEY 

Sẽ biết ơn nếu có ai có thể giúp tôi giải quyết vấn đề này.

+2

Bạn đang sử dụng thời gian chờ kết nối nào? –

+0

Hãy thử đặt mã của bạn trong một khối try-catch và kiểm tra ngoại lệ trong trình gỡ lỗi. Tôi đã làm điều này và đôi khi nhận được thêm chi tiết về vấn đề này, giống như một NULL được chèn vào trong một trường không nullable, đó là loại điều. – Melanie

+4

Hoạt động của bạn thành công nếu bạn chạy nó mà không có giao dịch? Nếu vậy, mất bao lâu để hoàn thành mà không có giao dịch? – Nathan

Trả lời

1

Vấn đề là dịch vụ MSDTC đã bị vô hiệu hóa và tôi đang sử dụng các thao tác db số lượng lớn. Sau khi bật nó, sự cố đã được giải quyết.

0

Dường như bạn có giao dịch không được cam kết. Hãy thử khởi động lại máy chủ Sql hoặc dịch vụ Oracle.