2017-02-07 9 views
0

最初に閉じる必要があります私はDataReaderが、私はangularjsとMVC-5を使用しています

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

ような方法および他のクラスと呼ばれるタスクを持っているクラスDBFunction.csを持って

iは、クラスのメソッドから

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

をデータベースからデータをフェッチしていますし、この中に他の層がある、私はdashboard.asmx

と呼ばれるWebサービスを使用しましたここ
[WebMethod] 
     [ScriptMethod(UseHttpGet = true)] 
     public void gettaskbyuser(string UserAutoId) 
     { 
      var json = ""; 
      json = js.Serialize(objtask.getdatabyuser(UserAutoId)); 
      Context.Response.Write(json); 
     } 

私はここにangularjs

の私のコントローラにデータを送信し、JSON形式にデータを変換していますことは、

$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> 
を持っています0

私のテーブル内のタグがあり、ユーザーがそれをクリックすると、ため、モーダルは、データ

初めて正常に動作
<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> 

でポップアップしますが、ユーザが第2の時間のためにそれを再度クリックしたとき他のユーザのレコード、それはおそらく未処理の例外が拒否

を示している。 {「データ」: "System.InvalidOperationExceptionが:最初に閉じる必要があります。このコマンドに関連付けられているオープン のDataReaderが既にあります。

このコードで何が間違っていますか?

+0

MultipleActiveResultSets = Trueの値を設定しましたか? – nabuchodonossor

+0

これは何ですか? –

+0

[ASP.NETでネストされたSqlDataReaderを使用して[既に開いているDataReader]例外が発生する可能性があります](http://stackoverflow.com/questions/10854267/already-an-open-datareader-exception-with-nested-sqldatareader-in -asp-net) – nabuchodonossor

答えて

0
  1. 常に新しい接続を作成してください。 .NETは接続プーリングを行っています。
  2. closeデータの読み取り後にコマンドを接続、読み取り、廃棄します。
  3. なぜSQLインジェクションやもののようなセキュリティ問題を処理するためにEntity Frameworkを使用しないのですか?
関連する問題