Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

There is already an open DataReader associated with this Command which must be closed first

I have this query and I get the error in this function:

var accounts = from account in context.Accounts                from guranteer in account.Gurantors                select new AccountsReport                {                    CreditRegistryId = account.CreditRegistryId,                    AccountNumber = account.AccountNo,                    DateOpened = account.DateOpened,                };   return accounts.AsEnumerable()                 .Select((account, index) => new AccountsReport()                     {                         RecordNumber = FormattedRowNumber(account, index + 1),                         CreditRegistryId = account.CreditRegistryId,                         DateLastUpdated = DateLastUpdated(account.CreditRegistryId, account.AccountNumber),                         AccountNumber = FormattedAccountNumber(account.AccountType, account.AccountNumber)                     })                 .OrderBy(c=>c.FormattedRecordNumber)                 .ThenByDescending(c => c.StateChangeDate);   public DateTime DateLastUpdated(long creditorRegistryId, string accountNo) {     return (from h in context.AccountHistory             where h.CreditorRegistryId == creditorRegistryId && h.AccountNo == accountNo             select h.LastUpdated).Max(); } 

Error is:

There is already an open DataReader associated with this Command which must be closed first.

Update:

stack trace added:

InvalidOperationException: There is already an open DataReader associated with this Command which must be closed first.]    System.Data.SqlClient.SqlInternalConnectionTds.ValidateConnectionForExecute(SqlCommand command) +5008639    System.Data.SqlClient.SqlConnection.ValidateConnectionForExecute(String method, SqlCommand command) +23    System.Data.SqlClient.SqlCommand.ValidateCommand(String method, Boolean async) +144    System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result) +87    System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method) +32    System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method) +141    System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior behavior) +12    System.Data.Common.DbCommand.ExecuteReader(CommandBehavior behavior) +10    System.Data.EntityClient.EntityCommandDefinition.ExecuteStoreCommands(EntityCommand entityCommand, CommandBehavior behavior) +443  [EntityCommandExecutionException: An error occurred while executing the command definition. See the inner exception for details.]    System.Data.EntityClient.EntityCommandDefinition.ExecuteStoreCommands(EntityCommand entityCommand, CommandBehavior behavior) +479    System.Data.Objects.Internal.ObjectQueryExecutionPlan.Execute(ObjectContext context, ObjectParameterCollection parameterValues) +683    System.Data.Objects.ObjectQuery`1.GetResults(Nullable`1 forMergeOption) +119    System.Data.Objects.ObjectQuery`1.System.Collections.Generic.IEnumerable<T>.GetEnumerator() +38    System.Linq.Enumerable.Single(IEnumerable`1 source) +114    System.Data.Objects.ELinq.ObjectQueryProvider.<GetElementFunction>b__3(IEnumerable`1 sequence) +4    System.Data.Objects.ELinq.ObjectQueryProvider.ExecuteSingle(IEnumerable`1 query, Expression queryRoot) +29    System.Data.Objects.ELinq.ObjectQueryProvider.System.Linq.IQueryProvider.Execute(Expression expression) +91    System.Data.Entity.Internal.Linq.DbQueryProvider.Execute(Expression expression) +69    System.Linq.Queryable.Max(IQueryable`1 source) +216    CreditRegistry.Repositories.CreditRegistryRepository.DateLastUpdated(Int64 creditorRegistryId, String accountNo) in D:\Freelance Work\SuperExpert\CreditRegistry\CreditRegistry\Repositories\CreditRegistryRepository.cs:1497    CreditRegistry.Repositories.CreditRegistryRepository.<AccountDetails>b__88(AccountsReport account, Int32 index) in D:\Freelance Work\SuperExpert\CreditRegistry\CreditRegistry\Repositories\CreditRegistryRepository.cs:1250    System.Linq.<SelectIterator>d__7`2.MoveNext() +198    System.Linq.Buffer`1..ctor(IEnumerable`1 source) +217    System.Linq.<GetEnumerator>d__0.MoveNext() +96 
like image 676
DotnetSparrow Avatar asked May 19 '11 17:05

DotnetSparrow


People also ask

How do you fix there is already an open DataReader associated with this Command which must be closed first?

There is already an open DataReader associated with this Command which must be closed first. Have you got solution for this error? Hi, Try disconnecting and reconnecting to database before executing the query.

Is already an open DataReader associated with this connection which must be closed first?

Why do I get the error message 'There is already an open DataReader associated with this Connection which must be closed first. ' This is caused if you are attempting to use the same DataReader more than once in your code without closing the previous Datareader.

How do you handle invalid attempt to read when no data is present?

You have to call dr. Read() before attempting to read any data. That method will return false if there is nothing to read.


1 Answers

This can happen if you execute a query while iterating over the results from another query. It is not clear from your example where this happens because the example is not complete.

One thing that can cause this is lazy loading triggered when iterating over the results of some query.

This can be easily solved by allowing MARS in your connection string. Add MultipleActiveResultSets=true to the provider part of your connection string (where Data Source, Initial Catalog, etc. are specified).

like image 64
Ladislav Mrnka Avatar answered Sep 22 '22 20:09

Ladislav Mrnka