我正在使用带有angularjs的MVC-5,我有一个DBFunction.cs类,其中的方法如下
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;
}
和另一个名为TASK的类
我正在从类的方法中获取数据库中的数据
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);
}
在这里,我将数据转换为json格式并将数据发送到我的angularjs控制器
这是我的控制器
$http.get('/WebServices/dashboard.asmx/gettaskbyuser', {
params: {
UserAutoId: $scope.showparam.UserAutoId
}
}).then(function (response) {
$scope.getdatainmodal = response.data;
})
点击按钮即可显示数据,
我有一张table
Azhar 4
Das 1
Minesh 1
<td><a href="#" ng-click="showmodal(x)" data-toggle="modal" data-target="#myModal">{{ x.TaskCount }}</a></td>
在我的表格中有一个a标签,当用户点击它时,就会弹出带有数据的模式
<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>
第一次可以正常工作,但当用户第二次单击它时,对于其他用户的记录,它显示了一个异常
可能未处理的拒绝:{“Data”:“System.InvalidOperationException:已经有一个与此命令关联的打开的DataReader,必须首先关闭它。
这段代码出了什么问题?
2条答案
按热度按时间bxfogqkk1#
我曾经遇到过类似的情况,我想使用ASMX(ASP.NET Web服务)将数据从后端发送到前端,但多次失败,因为前端无法达到我打算发送的文件格式。即使在后端添加了断点,也没有用。因此,我没有将后端数据转换为HTTP请求,而是将其转换为JSON。这是我的代码,我想它可能会对你有帮助。
这是我在索引顶部的视图,您可以看到使用Anularjs创建的服务,它将json加载到我们的模型中,当我们使用Angular 模型和控制器时,我们将看到这一点
这是位于本答案末尾的ASP.NET MVC控制器的视图,它应该位于视图/Shared/_Layout中
以下是用于此操作的angularjs模型和控制器
不要忘记在配置文件中添加连接字符串。
下面是我的asmx Web服务,我用它将服务转换为一个字符串,该字符串位于MVC的Models部分,因此为了访问这个int控制器,我们需要在控制器的顶部引用这个模型的名称空间,如下所示
最后,我使用的MVC控制器使用view(“view name”,“”,返回STRING_DATA的函数)将转换为STING的json注入到视图中;
希望你能得到你想要的答案。如果这让我感到困惑,我会更容易用文字,而不是写在这里。
zaqlnxep2#
1.请始终创建新连接。.NET正在进行连接池。
1.数据读取后关闭Connection、Reader和Dispose命令。
1.为什么不使用实体框架来处理SQL注入之类的安全问题?