为了账号安全,请及时绑定邮箱和手机立即绑定

已经有一个与此命令关联的打开DataReader,必须先关闭该命令

已经有一个与此命令关联的打开DataReader,必须先关闭该命令

C#
holdtom 2019-06-19 17:03:03
已经有一个与此命令关联的打开DataReader,必须先关闭该命令我有这个查询,并得到这个函数中的错误: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();}错误是:与此命令关联的已打开的DataReader必须先关闭。最新情况:堆栈跟踪添加: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
查看完整描述

3 回答

?
哈士奇WWW

TA贡献1799条经验 获得超6个赞

如果在迭代来自另一个查询的结果时执行查询,则会发生这种情况。从您的示例中不清楚这是在哪里发生的,因为该示例尚未完成。

导致这种情况的一个原因是在迭代某些查询的结果时触发了延迟加载。

这可以很容易地解决,允许火星在你的连接字符串。加MultipleActiveResultSets=true连接字符串的提供者部分(其中指定了数据源、初始目录等)。


查看完整回答
反对 回复 2019-06-19
?
qq_笑_17

TA贡献1818条经验 获得超7个赞

使用语法.ToList()将从db读取的对象转换为List,以避免再次读取。希望这对它有用。谢谢。


查看完整回答
反对 回复 2019-06-19
  • 3 回答
  • 0 关注
  • 1263 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信