【发布时间】:2011-12-05 06:19:19
【问题描述】:
我正在创建一个考勤系统并使用网格视图插入数据。网格上可能有很多行。一切进展顺利,数据也顺利进入。但我使用for 循环来检查每一行。当行数增加时,这会使性能变得很慢。而且往返次数也随着行数的增加而增加。
谁能为此提供更好的解决方案?
我已经根据你们修改了我的代码.....但是现在出现了一个问题,它只是多次插入网格的最后一行......除此之外,代码很好。
MySqlDataAdapter myworkdatta = myworkdatta = new MySqlDataAdapter("SELECT CID,EID,TID,ATTENDENCE FROM EMPLOYEEATT ORDER BY AID DESC LIMIT 1", conn);
DataSet myworkdsatt = new DataSet();
myworkdatta.Fill(myworkdsatt, "EMPLOYEEATT");
int i;
for (i = 0; i < emplist_gv.Rows.Count; i++)
{
string tid = emplist_gv.Rows[i].Cells[6].Value.ToString();
string eid = emplist_gv.Rows[i].Cells[0].Value.ToString();
string atid = emplist_gv.Rows[i].Cells[7].Value.ToString();
MySqlCommand cmdwk = new MySqlCommand("INSERT INTO EMPLOYEEATT (CID,EID,TID,ATTENDENCE) VALUES (@cid,@eid,@tid,@attendence)", conn);
MySqlParameter spcidatt = new MySqlParameter("@cid", calid);
MySqlParameter speid = new MySqlParameter("@eid", eid);
MySqlParameter sptid = new MySqlParameter("@tid", tid);
MySqlParameter spattendence = new MySqlParameter("@attendence", atid);
cmdwk.Parameters.Add(spcidatt);
cmdwk.Parameters.Add(speid);
cmdwk.Parameters.Add(sptid);
cmdwk.Parameters.Add(spattendence);
myworkdatta.InsertCommand = cmdwk;
DataRow drowk = myworkdsatt.Tables["EMPLOYEEATT"].NewRow();
drowk["CID"] = calid;
drowk["EID"] = eid;
drowk["TID"] = tid;
drowk["ATTENDENCE"] = atid;
myworkdsatt.Tables["EMPLOYEEATT"].Rows.Add(drowk);
}
myworkdatta.Update(myworkdsatt, "EMPLOYEEATT");
【问题讨论】:
-
在循环前移动选择,在循环内更改表并在循环后更新表。在循环的一次迭代中选择 2 次并插入数据不是一个好主意。
-
需要选择语句,因为它将获取最后一行 ID 并使用常规 exp 递增 1。
-
我已经根据你修改了我的代码.....但是现在出现了一个问题,它只是多次插入网格的最后一行......除此之外的代码很好。
-
您需要在循环之前获取 id 并在每次迭代中递增它。类似
drowk["ATTENDENCE"] = atid + i; -
ID 是自动递增的,因此它发生在数据库本身...
标签: c# mysql gridview datagridview