2017-02-07 16 views
0

Я использую MVC-5 с angularjs У меня есть класс DBFunction.cs, в котором у меня есть метод, какDataReader, связанный с этой командой должен быть закрыт первой

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; 
     } 

и другой класс называется задача

я выборка данных из базы данных из метода класса

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; 
     } 

и есть еще один слой в этом, я использовал WebService под названием dashboard.asmx

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

здесь я уверен, преобразование данных в формат JSON передавать данные на мой контроллер angularjs

и вот мой контроллер

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

данные будут отображаться на кнопке мыши,

у меня есть таблица

Azhar 4 
Das 1 
Minesh 1 

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

есть тег в моем столе, и когда пользователь нажимает, что модальный всплывает с данными

<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> 

, который отлично работает в первый раз, но когда пользователь нажимает кнопку снова во второй раз, для запись другого пользователя, она, показывающая исключения

Возможно необработанного отказ: { «данных»: "System.InvalidOperationException: Существует уже открытая DataReader, связанные с этой командой, которая должна быть закрыта первым.

что не так в этом коде?

+0

Вы установили значение MultipleActiveResultSets = True? – nabuchodonossor

+0

Я не знаю, что это? –

+0

Возможный дубликат исключения ["уже открытый DataReader" с вложенным SqlDataReader в ASP.NET] (http://stackoverflow.com/questions/10854267/already-an-open-datareader-exception-with-nested-sqldatareader-in -Asp-нетто) – nabuchodonossor

ответ

0
  1. Создайте всегда новое соединение. .NET делает пул соединений.
  2. Закрыть Подключение, считывание и удаление команды после считывания данных.
  3. Почему бы не использовать Entity Framework для решения проблем безопасности, таких как SQL-инъекция и прочее?