![](/img/trans.png)
[英]reader.Read() only read once even when there are multiple rows to read
[英]asp.net mvc 5 reader.read() only gets first and last rows
我有select2与员工的列表,管理员将添加到项目中。
我选择了多个员工,并将带有员工ID的json发送到控制器,控制器试图通过存储过程[Employee]从公司数据库emp列表中按员工获取员工,再到Web emp db。
我遇到这样的问题,即读者仅读取第一行和最后一行,而跳过中层的所有员工
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult EmpAdd()
{
var project_id = Convert.ToInt32(Request["project"]);
var company = Request["company"];
var emp = Request["emp"];
var ids = emp.Split(',');
var project = db.apsk_project.Where(x => x.id == project_id).FirstOrDefault();
cmd.CommandText = "Employee";
cmd.CommandType = CommandType.StoredProcedure;
cmd.Connection = sqlConnection1;
foreach(var i in ids) {
var it = Convert.ToInt32(i);
var kortele = db.apsk_workers.Where(x => x.id == it).FirstOrDefault();
if(kortele == null) {
sqlConnection1.Open();
cmd.Parameters.Clear();
cmd.Parameters.AddWithValue("company", company);
cmd.Parameters.AddWithValue("nr", it);
reader = cmd.ExecuteReader();
if(reader.HasRows) {
while(reader.Read()) {
apsk_workers apsk = new apsk_workers();
var v = reader.GetString(1);
var p = reader.GetString(2);
var d = reader.GetDateTime(3);
apsk.kof_id = 0;
apsk.algos_tipas = "";
apsk.vardas = v;
apsk.pavarde = p;
apsk.ar_dirba = d;
apsk.company = company;
apsk.manager = User.Identity.Name;
apsk.id = it;
db.apsk_workers.Add(apsk);
db.SaveChanges();
}
}
sqlConnection1.Close();
apsk_assigned _Assigned = new apsk_assigned();
_Assigned.project_id = project_id;
_Assigned.project = project.project;
_Assigned.worker_id = it;
db.apsk_assigned.Add(_Assigned);
db.SaveChanges();
} else {
var ar_projekte = db.apsk_assigned.Where(x => x.project_id == project_id && x.worker_id == it).FirstOrDefault();
if(ar_projekte == null) {
apsk_assigned _Assigned = new apsk_assigned();
_Assigned.project_id = project_id;
_Assigned.project = project.project;
_Assigned.worker_id = it;
db.apsk_assigned.Add(_Assigned);
db.SaveChanges();
}
}
}
指派人参加项目工作正常。
我将进行一些更改:
Parameters
等的行 让我们知道您是否需要有关特定Linq查询的帮助。 例如:代替db.apsk_project.Where(x => x.id == project_id).FirstOrDefault();
您可以使用db.apsk_project.FirstOrDefault(x => x.id == project_id);
因此,请不要先进行foreach操作,然后先进行更改或更改每一行的默认值,但要考虑集合,以便消除循环并提高性能。 希望这可以帮助。 如果没有,请发表评论,以便我尝试解释更多。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.