【问题标题】:SQL Azure + Getting an error 'There is already an open DataReader associated with this Command..', even after setting ‘MultipleActiveResultSets=True’SQL Azure + 出现错误“已经有一个打开的 DataReader 与此命令关联..”,即使在设置“MultipleActiveResultSets=True”之后也是如此
【发布时间】:2018-11-02 05:49:32
【问题描述】:

我们在云上部署的应用程序版本面临一些问题。

我们的应用程序是一个带有 ADO .NET Entity Framework 的 ASP.NET MVC 3 项目。

根据 msdn 博客,我们需要在我们正确完成的数据库连接字符串中添加参数“MultipleActiveResultSets=True”(用于带有 SQL azure 的实体框架)。

从我们的应用程序执行数据库查询时,我们得到以下异常:''已经有一个打开的 DataReader 与此命令关联,必须先关闭。', 我猜这与“MultipleActiveResultSets=True”属性非常相关。

应用程序在本地环境中运行良好,使用我们本地部署的数据库以及使用 SQL azure 数据库(在本地环境中)。

但是当我们部署我们的云应用程序时,我们会遇到上述错误。似乎没有从连接字符串中读取“MultipleActiveResultSets=True”属性。

我使用的连接字符串如下:

    <connectionStrings>
        <add name="#DBInstanceName#" connectionString="Data Source=tcp:#server#.database.windows.net,1433;Initial Catalog=#DBName#;User ID=”UserName#@#server#;Password=”#password#”;MultipleActiveResultSets=True" providerName="System.Data.SqlClient"/>
    </connectionStrings>

我能够从本地部署的应用程序中使用上述连接字符串连接到 SQL Azure 数据库,没有任何例外。但是,当使用相同的连接字符串在云上部署相同的应用程序时,会出现上述错误。

你能帮我们解决这个问题吗?

【问题讨论】:

标签: asp.net-mvc azure azure-sql-database


【解决方案1】:

我也遇到了同样的问题。我尝试在 Web.config 连接中设置“MultipleActiveResultSets=True” - 没有结果。 最后,我通过直接在网站的 Azure 仪表板手动编辑连接字符串解决了问题 - 在“配置”选项卡中有“连接字符串”设置,您应该在其中手动添加“MultipleActiveResultSets=True;”细绳。 之后,我终于让 MARS 工作了。

【讨论】:

  • 编辑连接字符串后也需要重启网站。
  • 感谢您的回答。我使用 Visual Studio 来管理不同的环境,并且连接字符串是正确的。我的测试网站使用 Visual Studio 的 Web 配置转换,但我的产品似乎是从 Azure 劫持的。我想在 VS 2012 中禁用 Azure 并管理所有配置转换。
  • 这行得通!显然,即使通过 FTP 访问 web.config 文件并设置 MultipleActiveResultSets=True 也不起作用。这是唯一似乎可以削减它的方法。
  • 我将它添加到 azure manager 中的 DefaultConnection(我那里唯一的一个)中,但没有帮助..
  • 我认为在通过 Visual Studio 部署时,这已更新。看起来不是……谢谢!
【解决方案2】:

或者,当您使用 Visual Studio 中的发布功能时,您可以将“MultipleActiveResultSets=true”添加到您的连接字符串并更新目标 web.config。确保选择“在运行时使用此连接字符串(更新目标 web.config)。”

【讨论】:

  • 就是这样!由于某种原因,连接字符串已过时。谢谢!
  • 这是要走的路,我一直用这种方法,而且效果很好,
【解决方案3】:

您必须在连接字符串中设置 multipleresultsets=true 并重新启动。

已删除答案

编辑:这是有争议的!检查下面的评论......我没有时间 调查...

我想它已经打开了。

除了 Faisal Mohamood(项目经理, Entity Framework)在 2010 年声明如下:“不用说, 我们将确保为 SQL Azure 自动打开 MARS 当我们开始发布下一个更新时,基于应用程序 产品。”在这里找到它: http://blogs.msdn.com/b/adonet/archive/2010/06/09/remember-to-re-enable-mars-in-your-sql-azure-based-ef-apps.aspx

【讨论】:

  • 似乎还没有到位...需要将 MultipleActiveResultSets=True 添加到 Azure 网站的连接字符串,如“irium”所述
【解决方案4】:

我们在新的 Azure 门户上也遇到了这个问题。 MARS 适用于所有本地开发环境,但在 Azure 上抛出了同样令人讨厌的异常。我们验证了部署到 Azure 的物理 web.config 文件中的连接字符串包含 MultipleActiveResultSets=true;,但应用程序似乎没有接受它。最终起作用的是应用服务实例 > 设置 > 数据连接,并删除与 web.config 中所讨论的同名的数据连接。我的猜测是 Azure 存储的那个胜过部署的 web.config 中的那个。

【讨论】:

    【解决方案5】:

    尝试在代码中分配 MultipleActiveResultSets。是没读还是没用?

    SqlConnectionStringBuilder.MultipleActiveResultSets

    【讨论】:

      【解决方案6】:

      我有同样的问题,但我解决了来自发布助手的连接字符串中的 MultipleActiveResultSets=True,作为 irium

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-07-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多