在gridView中插入多行而不使用'for'循环

时间:2011-12-05 06:19:20

标签: c# mysql gridview datagridview

我正在创建一个考勤系统并使用网格视图来插入数据。网格上可能有很多行。一切进展顺利,数据也进展顺利。但我使用for循环来检查每一行。当行数增加时,这会使性能变得非常慢。而且随着行数的增加,往返次数也会增加。

任何人都可以为此提供更好的解决方案吗?

我已根据你所有修改我的CODE .....但现在出现了一个问题,它只是多次插入网格的最后一行......除此之外,代码还可以。< / p>

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 个答案:

答案 0 :(得分:1)

考虑到你的2选择SQL语句似乎没有包含与特定行相关的任何内容,你可以将其从循环中取出并只使用它的值很容易。

因为你需要在每一行上插入,我不明白为什么,所以似乎很难删除那里的数据库命中。

如果您正在进行批量插入,您可以查看MySql的批量插入:MySql Bulk insert

答案 1 :(得分:0)

您可以使用SqlBulkCopy,它易于使用。基本上只是为它提供一个数据表(或数据读取器),它会将行中的行复制到目标表。

很快,代码块看起来像:

DataTable dataTableInGridView = (DataTable)emplist_gv.DataSource;
using (SqlConnection connection =
            new SqlConnection(connectionString))
{
    using (SqlBulkCopy bulkCopy =
                    new SqlBulkCopy(connection))
    {
        bulkCopy.DestinationTableName =
            "dbo.BulkCopyDemoMatchingColumns";
        try
        {
            // Write from the source to the destination.
            bulkCopy.WriteToServer(dataTableInGridView);
        }
        catch (Exception ex)
        {
            // Handle exception
        }
    }
}