Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在gridView中插入几行,而不使用“for”循环_C#_Mysql_Gridview_Datagridview - Fatal编程技术网

C# 在gridView中插入几行,而不使用“for”循环

C# 在gridView中插入几行,而不使用“for”循环,c#,mysql,gridview,datagridview,C#,Mysql,Gridview,Datagridview,我正在创建考勤系统,并使用网格视图插入数据。网格上可能有许多行。一切进展顺利,数据也进入良好状态。但是我使用for循环来检查每一行。当行数增加时,这使得性能非常慢。而且随着行数的增加,往返次数也会增加 有谁能提供更好的解决方案吗 我已经根据u all修改了我的代码……但是现在出现了一个问题,它只是多次插入网格的最后一行……除此之外,代码还可以 MySqlDataAdapter myworkdatta = myworkdatta = new MySqlDataAdapter("SELECT CID

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

有谁能提供更好的解决方案吗


我已经根据u all修改了我的代码……但是现在出现了一个问题,它只是多次插入网格的最后一行……除此之外,代码还可以

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");

考虑到您的2selectsql语句似乎不包含任何与特定行相关的内容,您可以将其从循环中去掉,并简单地使用其值

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

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

您可以使用,它很容易使用。基本上,只需为它提供一个数据表或数据读取器,它就会将行从该源复制到目标表

很快,代码块将如下所示:

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

先生,这些行不能存储在数据表temp中。然后更新到数据库…先生,Select语句是必需的,因为我将获取最后一行ID,并使用常规exp递增1。如果需要,您可以将其存储在文件中并在后台运行批处理。它无法存储在内存或任何地方,因此仍将有一些磁盘写入操作。可能比DB写入快得多。获取最后一行后,您可以在同一insert语句中使用mysql\u insert\u id,并在insert语句中获取id。至于将ID增加1,如果您手动执行此操作,则应在数据库中通过将主键设置为标识列来执行此操作。我已根据u修改了我的代码……但现在出现了一个问题,它只是多次插入网格的最后一行……除此之外,代码还可以。Move在循环之前选择,在循环内更改表,并在循环后更新表。在循环的一次迭代中选择2次并插入数据不是一个好主意。需要Select语句,因为它将获取最后一行ID,并使用常规exp递增1。我已根据u修改了我的代码……但现在出现了一个问题,它只是多次插入网格的最后一行……除此之外代码很好。您需要在循环之前获取id,并在每次迭代中递增它。比如drowk[attentince]=atid+i;ID是自动递增的,因此它发生在数据库本身上…MySQl不支持SqlBulkCopy