This question is locked. New answers and comments are not allowed.
I'm using Telerik Open Access to interface between my C#, asp.net MVC project and a SQL database. I started having a problem on a section that has been working fine. When I update a record in the database, every once in a while the record isn't updated. Added a try block to the SaveChanges command and found an error saying "New transaction is not allowed". I researched this error online, but found mostly comments relating to Entity Framework, not Telerik Open Access. I submitted a ticket to Telerik, but I know Open Access isn't supported by them so I don't expect a solution from them. Can someone explain how to fix this?
Here's my code:
public void UpdateWorkOrderGen(tblWorkOrder obj)
{
// ensure valid loc for this company
int compId = int.Parse(obj.CompanyId.ToString());
int locId = int.Parse(obj.LocationId.ToString());
var locToUse = GetLocIdToUse(compId, locId);
var upd = dat.tblWorkOrders.FirstOrDefault(itm => itm.WorkOrderId == obj.WorkOrderId);
if (upd != null)
{
upd.CompanyId = obj.CompanyId;
upd.LocationId = locToUse;
upd.AssignToCompany = obj.AssignToCompany;
upd.WorkOrderDate = obj.WorkOrderDate;
upd.ServiceType = obj.ServiceType;
upd.WorkOrderPriority = obj.WorkOrderPriority;
upd.WorkOrderStatus = obj.WorkOrderStatus;
upd.DateNeeded = obj.DateNeeded;
upd.ReferenceNumber = obj.ReferenceNumber;
upd.RequestedBy = obj.RequestedBy;
upd.ProblemDescription = CleanCtrlCharsFromText(obj.ProblemDescription);
upd.CustomerContract = obj.CustomerContract;
upd.VendorContract = obj.VendorContract;
}
try
{
dat.SaveChanges();
}
catch (Exception ex)
{
throw ex;
}
}
And here is the error I'm getting:
Telerik.OpenAccess.RT.sql.SQLException: New transaction is not allowed because there are other threads running in the session. ---> System.Data.SqlClient.SqlException: New transaction is not allowed because there are other threads running in the session. at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action1 wrapCloseInAction) at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action1 wrapCloseInAction) at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) at System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady) at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) at System.Data.SqlClient.TdsParser.TdsExecuteTransactionManagerRequest(Byte[] buffer, TransactionManagerRequestType request, String transactionName, TransactionManagerIsolationLevel isoLevel, Int32 timeout, SqlInternalTransaction transaction, TdsParserStateObject stateObj, Boolean isDelegateControlRequest) at System.Data.SqlClient.SqlInternalConnectionTds.ExecuteTransactionYukon(TransactionRequest transactionRequest, String transactionName, IsolationLevel iso, SqlInternalTransaction internalTransaction, Boolean isDelegateControlRequest) at System.Data.SqlClient.SqlInternalConnectionTds.ExecuteTransaction(TransactionRequest transactionRequest, String name, IsolationLevel iso, SqlInternalTransaction internalTransaction, Boolean isDelegateControlRequest) at System.Data.SqlClient.SqlInternalConnection.BeginSqlTransaction(IsolationLevel iso, String transactionName, Boolean shouldReconnect) at System.Data.SqlClient.SqlConnection.BeginTransaction(IsolationLevel iso, String transactionName) at System.Data.SqlClient.SqlConnection.BeginDbTransaction(IsolationLevel isolationLevel) at System.Data.Common.DbConnection.BeginTransaction(IsolationLevel isolationLevel) at OpenAccessRuntime.Intellitrace.BeginTransaction(DbConnection connection, IsolationLevel isolationLevel, String id) at Telerik.OpenAccess.Runtime.Logging.LoggingDbConnection.BeginDbTransaction(IsolationLevel isolationLevel) at System.Data.Common.DbConnection.BeginTransaction(IsolationLevel isolationLevel) at Telerik.OpenAccess.RT.Adonet2Generic.Impl.ConnectionImp.DefBeginTransaction() at Telerik.OpenAccess.RT.Adonet2Generic.Impl.Sql2005Factory.Telerik.OpenAccess.RT.Adonet2Generic.Impl.IADOFactory.BeginTransaction(ConnectionImp c) at Telerik.OpenAccess.RT.Adonet2Generic.Impl.ConnectionImp.begin() --- End of inner exception stack trace --- at Telerik.OpenAccess.RT.Adonet2Generic.Impl.ConnectionImp.begin() at OpenAccessRuntime.Relational.conn.PsPoolConnection.begin() at OpenAccessRuntime.Relational.RelationalStorageManager.obtainConnection(Boolean forWriting) at OpenAccessRuntime.Relational.RelationalStorageManager.generateUpdates(OID oid, Int32 index, ClassMetaData cmd, PersistGraph graph, Int32[] fieldNos, Boolean haveNewObjects, CharBuf s, BatchControlInfo batchControl, Boolean previousInserts) at OpenAccessRuntime.Relational.RelationalStorageManager.persistPass1(PersistGraph graph, BatchControlInfo batchControl)