2017-02-07 2 views
0

I mvc-5 mit AngularJS bin mit habe ich eine Klasse DBFunction.cs, in dem ich habe eine Methode, wieDatareader mit diesem Befehl zugeordnet sind, müssen zuerst geschlossen werden

public SqlDataReader ExecuteSP_Reader(string ProcedureName, SqlCommand MyCommand) 
     { 
      if (con.State == ConnectionState.Closed) 
       con.Open(); 
      MyCommand.CommandType = CommandType.StoredProcedure; 
      MyCommand.CommandText = ProcedureName; 
      //MyCommand.Connection = (SqlConnection)HttpContext.Current.Application["con"]; 
      MyCommand.Connection = con; 

      SqlDataReader _Reader = MyCommand.ExecuteReader(); 

      //con.Close(); 
      return _Reader; 
     } 

und eine andere Klasse namens Aufgabe

i die Daten aus der Datenbank von der Methode der Klasse

public List<object>getdatabyuser(string UserAutoId=null) 
     { 
      cmd = new SqlCommand(); 
      List<object> getdatauser = new List<object>(); 
      if(!string.IsNullOrEmpty(UserAutoId)) 
       cmd.Parameters.AddWithValue("@userautoid", UserAutoId); 
      SqlDataReader dr; 
      dr = dbf.ExecuteSP_Reader("TMS_GETTASKBYUSERNAME", cmd); 
      while(dr.Read()) 
      { 
       getdatauser.Add(new 
       { 
        TaskName=dr["TaskName"].ToString(), 
        ParentAutoID=dr["ParentAutoID"].ToString(), 
        UserAutoId = dr["UserAutoId"].ToString(), 
        AssignBy=dr["AssignBy"].ToString(), 
        AssignTo=dr["AssignTo"].ToString() 
       }); 
      } 
      dr.Close(); 
      return getdatauser; 
     } 

und es gibt eine andere Schicht in dieser ist holen, habe ich eine Webservice namens dashboard.asmx

[WebMethod] 
     [ScriptMethod(UseHttpGet = true)] 
     public void gettaskbyuser(string UserAutoId) 
     { 
      var json = ""; 
      json = js.Serialize(objtask.getdatabyuser(UserAutoId)); 
      Context.Response.Write(json); 
     } 

hier i die Daten in JSON-Format an Umwandlung ein, die Daten zu meinem Controller von AngularJS

Senden und hier ist mein Controller

$http.get('/WebServices/dashboard.asmx/gettaskbyuser', { 
       params: { 
        UserAutoId: $scope.showparam.UserAutoId 
       } 
      }).then(function (response) { 
       $scope.getdatainmodal = response.data; 
      }) 

die Daten werden auf Tastenklick angezeigt werden,

ich habe eine Tabelle

Azhar 4 
Das 1 
Minesh 1 

<td><a href="#" ng-click="showmodal(x)" data-toggle="modal" data-target="#myModal">{{ x.TaskCount }}</a></td> 

gibt es einen Tag in meinem Tisch und wenn der Benutzer das klicken, öffnet sich modal mit den Daten bis

<table class="table table-bordered table-responsive"> 
          <tr class="bg-primary"> 
           <td><center><span class="glyphicon glyphicon-edit"></span></center></td> 
           <td>TaskName</td> 
           <td>User Name</td> 
           <td>AssignBy</td> 
           <td>AssignTo</td> 
           <td ng-hide="true">Parent Id</td> 
          </tr> 
          <tr ng-repeat="x in getdatainmodal"> 
           <td><center><a href="#" class="btn btn-success">Edit</a></center></td> 
           <td>{{x.TaskName}}</td> 
           <td>{{x.UserAutoId}}</td> 
           <td>{{x.AssignBy}}</td> 
           <td>{{x.AssignTo}}</td> 
           <td ng-hide="true">{{x.ParentAutoID}}</td> 
          </tr> 
         </table> 

, die zum ersten Mal gut funktioniert, aber wenn ein Benutzer klickt es wieder zum zweiten Mal, für andere Benutzer-Datensatz ist es ein Ausnahmen

Möglicherweise unhandled Ablehnung zeigt: { „Daten“: "System.InvalidOperationException: es gibt bereits eine offene Datareader mit diesem Befehl zugeordnet, der zuerst geschlossen werden muss.

Was ist in diesem Code falsch?

+0

Haben Sie den Wert MultipleActiveResultSets = True festgelegt? – nabuchodonossor

+0

Ich weiß nicht, was das ist? –

+0

Mögliches Duplikat von ["bereits eine offene DataReader" -Ausnahme mit verschachteltem SqlDataReader in ASP.NET] (http://stackoverflow.com/questions/10854267/already-anopen-datareader-exception-with-nested-sqldatareader-in) -asp-net) – nabuchodonossor

Antwort

0
  1. Bitte erstellen Sie immer eine neue Verbindung. .NET macht Verbindungspooling.
  2. Schließen Sie die Verbindung, Reader und Entsorgen Sie den Befehl nach dem Lesen der Daten.
  3. Warum nicht Entity Framework verwenden, um Sicherheitsprobleme wie SQL-Injektion und so zu behandeln?
Verwandte Themen