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

  • Question

  • User-997568385 posted

    I'm getting the "There is already an open DataReader associated with this Command which must be closed first." message when I publish my site to Azure. It works fine when I run it locally and I add MultipleActiveResultSets=true; to the connectionString.

    Sunday, January 8, 2017 3:25 AM

All replies

  • User-1716253493 posted

    I suggest you to post the codes causing error.

    Sunday, January 8, 2017 5:33 AM
  • User-997568385 posted

    The error happens when this page is loaded:

    <%@ Page Title="User Maintenance" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="Ch20UserMaintenance.Default" %>
    
    <asp:Content ID="BodyContent" ContentPlaceHolderID="mainPlaceholder" runat="server">
        <h1>Maintain users and roles</h1>
        (Only users associated with the Admin role can access this page)   
        
        <div class="row">
            <div class="col-sm-12 table-responsive">
                <h2>Users</h2>
                <asp:GridView ID="grdUsers" runat="server" DataKeyNames="Id"
                    AutoGenerateColumns="false" SelectMethod="grdUsers_GetData" 
                    ItemType="Ch20UserMaintenance.Models.ApplicationUser" 
                    CssClass="table table-bordered table-striped table-condensed" 
                    OnPreRender="GridView_PreRender">
                    <Columns>
                        <asp:BoundField HeaderText="User Name" DataField="UserName" />
                        <asp:BoundField HeaderText="Email" DataField="Email" />
                        <asp:TemplateField HeaderText="Roles">
                            <ItemTemplate>
                                <asp:Label runat="server" Text='<%# ListRoles(Item.Roles) %>'></asp:Label>
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:CommandField ShowSelectButton="true" />
                    </Columns>
                </asp:GridView>        
            </div>
            <div class="col-sm-6">
                <asp:DetailsView ID="dvUsers" runat="server" DataKeyNames="Id" 
                    AutoGenerateRows="false" CssClass="table table-bordered table-condensed" 
                    SelectMethod="dvUsers_GetItem" UpdateMethod="dvUsers_UpdateItem" 
                    InsertMethod="dvUsers_InsertItem" DeleteMethod="dvUsers_DeleteItem">
                    <Fields>
                        <asp:BoundField HeaderText="Email" DataField="Email" />
                        <asp:CommandField ShowEditButton="true" ShowInsertButton="true" 
                            ShowDeleteButton="true" />
                    </Fields>
                </asp:DetailsView>
            </div>
        </div>
    
        <div class="row">
            <div class="col-sm-6">
                <h2>Roles</h2>
                <asp:GridView ID="grdRoles" runat="server" DataKeyNames="Id" 
                    AutoGenerateColumns="false" SelectMethod="grdRoles_GetData"
                    CssClass="table table-bordered table-striped table-condensed" 
                    OnPreRender="GridView_PreRender">
                    <Columns>
                        <asp:BoundField HeaderText="Role Name" DataField="Name" />
                        <asp:CommandField ShowSelectButton="true" />
                    </Columns>
                </asp:GridView>
                <asp:DetailsView ID="dvRoles" runat="server" DataKeyNames="Id" 
                    AutoGenerateRows="false" CssClass="table table-bordered table-condensed" 
                    SelectMethod="dvRoles_GetItem" UpdateMethod="dvRoles_UpdateItem" 
                    InsertMethod="dvRoles_InsertItem" DeleteMethod="dvRoles_DeleteItem">
                    <Fields>
                        <asp:BoundField HeaderText="Role Name" DataField="Name" />
                        <asp:CommandField ShowEditButton="true" ShowInsertButton="true" 
                            ShowDeleteButton="true" />
                    </Fields>
                </asp:DetailsView>
            </div>
            <div class="col-sm-6">
                <h2>Add Roles to User</h2>
                <div class="form-group">
                    <label class="control-label">Select a user:</label>
                    <asp:DropDownList ID="ddlUsers" runat="server" 
                        SelectMethod="grdUsers_GetData" DataValueField="Id"
                        DataTextField="UserName" CssClass="form-control">
                    </asp:DropDownList> 
                </div>
                <div class="form-group">
                    <label class="control-label">Add one or more roles:</label>
                    <asp:ListBox ID="lstRoles" runat="server" SelectionMode="Multiple" 
                        SelectMethod="grdRoles_GetData" DataValueField="Id"
                        DataTextField="Name" CssClass="form-control"></asp:ListBox>
                </div>
                <div class="form-group">
                    <asp:Button ID="btnAddRoles" runat="server" Text="Add Roles" 
                    CssClass="btn btn-default" OnClick="btnAddRoles_Click" />
                </div>
            </div>
        </div>
    
    </asp:Content>

    and the aspx.cs

    <%@ Page Title="User Maintenance" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="Ch20UserMaintenance.Default" %>
    
    <asp:Content ID="BodyContent" ContentPlaceHolderID="mainPlaceholder" runat="server">
        <h1>Maintain users and roles</h1>
        (Only users associated with the Admin role can access this page)   
        
        <div class="row">
            <div class="col-sm-12 table-responsive">
                <h2>Users</h2>
                <asp:GridView ID="grdUsers" runat="server" DataKeyNames="Id"
                    AutoGenerateColumns="false" SelectMethod="grdUsers_GetData" 
                    ItemType="Ch20UserMaintenance.Models.ApplicationUser" 
                    CssClass="table table-bordered table-striped table-condensed" 
                    OnPreRender="GridView_PreRender">
                    <Columns>
                        <asp:BoundField HeaderText="User Name" DataField="UserName" />
                        <asp:BoundField HeaderText="Email" DataField="Email" />
                        <asp:TemplateField HeaderText="Roles">
                            <ItemTemplate>
                                <asp:Label runat="server" Text='<%# ListRoles(Item.Roles) %>'></asp:Label>
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:CommandField ShowSelectButton="true" />
                    </Columns>
                </asp:GridView>        
            </div>
            <div class="col-sm-6">
                <asp:DetailsView ID="dvUsers" runat="server" DataKeyNames="Id" 
                    AutoGenerateRows="false" CssClass="table table-bordered table-condensed" 
                    SelectMethod="dvUsers_GetItem" UpdateMethod="dvUsers_UpdateItem" 
                    InsertMethod="dvUsers_InsertItem" DeleteMethod="dvUsers_DeleteItem">
                    <Fields>
                        <asp:BoundField HeaderText="Email" DataField="Email" />
                        <asp:CommandField ShowEditButton="true" ShowInsertButton="true" 
                            ShowDeleteButton="true" />
                    </Fields>
                </asp:DetailsView>
            </div>
        </div>
    
        <div class="row">
            <div class="col-sm-6">
                <h2>Roles</h2>
                <asp:GridView ID="grdRoles" runat="server" DataKeyNames="Id" 
                    AutoGenerateColumns="false" SelectMethod="grdRoles_GetData"
                    CssClass="table table-bordered table-striped table-condensed" 
                    OnPreRender="GridView_PreRender">
                    <Columns>
                        <asp:BoundField HeaderText="Role Name" DataField="Name" />
                        <asp:CommandField ShowSelectButton="true" />
                    </Columns>
                </asp:GridView>
                <asp:DetailsView ID="dvRoles" runat="server" DataKeyNames="Id" 
                    AutoGenerateRows="false" CssClass="table table-bordered table-condensed" 
                    SelectMethod="dvRoles_GetItem" UpdateMethod="dvRoles_UpdateItem" 
                    InsertMethod="dvRoles_InsertItem" DeleteMethod="dvRoles_DeleteItem">
                    <Fields>
                        <asp:BoundField HeaderText="Role Name" DataField="Name" />
                        <asp:CommandField ShowEditButton="true" ShowInsertButton="true" 
                            ShowDeleteButton="true" />
                    </Fields>
                </asp:DetailsView>
            </div>
            <div class="col-sm-6">
                <h2>Add Roles to User</h2>
                <div class="form-group">
                    <label class="control-label">Select a user:</label>
                    <asp:DropDownList ID="ddlUsers" runat="server" 
                        SelectMethod="grdUsers_GetData" DataValueField="Id"
                        DataTextField="UserName" CssClass="form-control">
                    </asp:DropDownList> 
                </div>
                <div class="form-group">
                    <label class="control-label">Add one or more roles:</label>
                    <asp:ListBox ID="lstRoles" runat="server" SelectionMode="Multiple" 
                        SelectMethod="grdRoles_GetData" DataValueField="Id"
                        DataTextField="Name" CssClass="form-control"></asp:ListBox>
                </div>
                <div class="form-group">
                    <asp:Button ID="btnAddRoles" runat="server" Text="Add Roles" 
                    CssClass="btn btn-default" OnClick="btnAddRoles_Click" />
                </div>
            </div>
        </div>
    
    </asp:Content>

    Sunday, January 8, 2017 4:27 PM
  • User753101303 posted

    Hi,

    It would be rather in your data access code. Don't your have a stack trace with your exception which would tell in which method it happens?

    It seems you had no support for that in Azure. It seems it has been added since then but I didn't found something really conclusive. Which version do you use? Could it be perhaps and old Azure SQL version that doesn't have support for that?

    At worst you may have to rework your code to avoid that...

    Sunday, January 8, 2017 5:03 PM
  • User-997568385 posted

    [InvalidOperationException: There is already an open DataReader associated with this Command which must be closed first.]
       System.Data.SqlClient.SqlInternalConnectionTds.ValidateConnectionForExecute(SqlCommand command) +1544289
       System.Data.SqlClient.SqlConnection.ValidateConnectionForExecute(String method, SqlCommand command) +89
       System.Data.SqlClient.SqlCommand.ValidateCommand(String method, Boolean async) +268
       System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, TaskCompletionSource`1 completion, Int32 timeout, Task& task, Boolean& usedCache, Boolean asyncWrite, Boolean inRetry) +118
       System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method) +64
       System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method) +161
       System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior behavior) +41
       System.Data.Common.DbCommand.ExecuteReader(CommandBehavior behavior) +12
       System.Data.Entity.Infrastructure.Interception.DbCommandDispatcher.<Reader>b__c(DbCommand t, DbCommandInterceptionContext`1 c) +9
       System.Data.Entity.Infrastructure.Interception.InternalDispatcher`1.Dispatch(TTarget target, Func`3 operation, TInterceptionContext interceptionContext, Action`3 executing, Action`3 executed) +72
       System.Data.Entity.Infrastructure.Interception.DbCommandDispatcher.Reader(DbCommand command, DbCommandInterceptionContext interceptionContext) +356
       System.Data.Entity.Internal.InterceptableDbCommand.ExecuteDbDataReader(CommandBehavior behavior) +166
       System.Data.Common.DbCommand.ExecuteReader(CommandBehavior behavior) +12
       System.Data.Entity.Core.EntityClient.Internal.EntityCommandDefinition.ExecuteStoreCommands(EntityCommand entityCommand, CommandBehavior behavior) +37

    [EntityCommandExecutionException: An error occurred while executing the command definition. See the inner exception for details.]
       System.Data.Entity.Core.EntityClient.Internal.EntityCommandDefinition.ExecuteStoreCommands(EntityCommand entityCommand, CommandBehavior behavior) +112
       System.Data.Entity.Core.Objects.Internal.ObjectQueryExecutionPlan.Execute(ObjectContext context, ObjectParameterCollection parameterValues) +744
       System.Data.Entity.Core.Objects.<>c__DisplayClass7.<GetResults>b__6() +97
       System.Data.Entity.Core.Objects.ObjectContext.ExecuteInTransaction(Func`1 func, IDbExecutionStrategy executionStrategy, Boolean startLocalTransaction, Boolean releaseConnectionOnSuccess) +288
       System.Data.Entity.Core.Objects.<>c__DisplayClass7.<GetResults>b__5() +154
       System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.Execute(Func`1 operation) +189
       System.Data.Entity.Core.Objects.ObjectQuery`1.GetResults(Nullable`1 forMergeOption) +279
       System.Data.Entity.Core.Objects.ObjectQuery`1.Execute(MergeOption mergeOption) +31
       System.Data.Entity.Core.Objects.DataClasses.EntityCollection`1.Load(List`1 collection, MergeOption mergeOption) +133
       System.Data.Entity.Core.Objects.DataClasses.EntityCollection`1.Load(MergeOption mergeOption) +30
       System.Data.Entity.Core.Objects.DataClasses.RelatedEnd.DeferredLoad() +333
       System.Data.Entity.Core.Objects.Internal.LazyLoadBehavior.LoadProperty(TItem propertyValue, String relationshipName, String targetRoleName, Boolean mustBeNull, Object wrapperObject) +86
       System.Data.Entity.Core.Objects.Internal.<>c__DisplayClass7`2.<GetInterceptorDelegate>b__1(TProxy proxy, TItem item) +106
       System.Data.Entity.DynamicProxies.ApplicationUser_B1694AF32B388D63B010B92720D87D303814569EC09D880B08E1F70DD7BFD6E6.get_Roles() +23
       ASP.maintenance_default_aspx.__DataBinding__control7(Object sender, EventArgs e) +98
       System.Web.UI.Control.OnDataBinding(EventArgs e) +84
       System.Web.UI.Control.DataBind(Boolean raiseOnDataBinding) +150
       System.Web.UI.Control.DataBind() +17
       System.Web.UI.Control.DataBindChildren() +185
       System.Web.UI.Control.DataBind(Boolean raiseOnDataBinding) +160
       System.Web.UI.Control.DataBind() +17
       System.Web.UI.Control.DataBindChildren() +185
       System.Web.UI.Control.DataBind(Boolean raiseOnDataBinding) +160
       System.Web.UI.Control.DataBind() +17
       System.Web.UI.WebControls.GridView.CreateRow(Int32 rowIndex, Int32 dataSourceIndex, DataControlRowType rowType, DataControlRowState rowState, Boolean dataBind, Object dataItem, DataControlField[] fields, TableRowCollection rows, PagedDataSource pagedDataSource) +167
       System.Web.UI.WebControls.GridView.CreateChildControls(IEnumerable dataSource, Boolean dataBinding) +2940
       System.Web.UI.WebControls.CompositeDataBoundControl.PerformDataBinding(IEnumerable data) +67
       System.Web.UI.WebControls.GridView.PerformDataBinding(IEnumerable data) +14
       System.Web.UI.WebControls.DataBoundControl.OnDataSourceViewSelectCallback(IEnumerable data) +128
       System.Web.UI.DataSourceView.Select(DataSourceSelectArguments arguments, DataSourceViewSelectCallback callback) +34
       System.Web.UI.WebControls.ModelDataSourceView.Select(DataSourceSelectArguments arguments, DataSourceViewSelectCallback callback) +80
       System.Web.UI.WebControls.DataBoundControl.PerformSelect() +143
       System.Web.UI.WebControls.BaseDataBoundControl.DataBind() +74
       System.Web.UI.WebControls.GridView.DataBind() +9
       System.Web.UI.WebControls.BaseDataBoundControl.EnsureDataBound() +114
       System.Web.UI.WebControls.CompositeDataBoundControl.CreateChildControls() +75
       System.Web.UI.Control.EnsureChildControls() +92
       System.Web.UI.Control.PreRenderRecursiveInternal() +42
       System.Web.UI.Control.PreRenderRecursiveInternal() +160
       System.Web.UI.Control.PreRenderRecursiveInternal() +160
       System.Web.UI.Control.PreRenderRecursiveInternal() +160
       System.Web.UI.Control.PreRenderRecursiveInternal() +160
       System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +883

    Sunday, January 8, 2017 8:13 PM
  • User-707554951 posted

    Hi rstambach,

    From your description, it seems that your problem is more related to Azure. So, I suggest you post your thread on azure.

    The following is azure forum’s  link:

    https://forums.asp.net/1247.aspx/1?Azure+and+ASP+NET

    Best regard

    Cathy

    Tuesday, January 10, 2017 2:09 AM