Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/279.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# 处理Access数据库时处理速度慢_C#_Ms Access_Oledb - Fatal编程技术网

C# 处理Access数据库时处理速度慢

C# 处理Access数据库时处理速度慢,c#,ms-access,oledb,C#,Ms Access,Oledb,从数据库读取和写入数据时,设备的速度会呈指数级下降,而当过程重复时,速度会慢得多。有没有办法加快处理速度? 我正在用C#Windows应用程序编写一个程序 代码工作正常,没有问题,但问题只存在于速度较慢的可执行文件中。 如以下代码所述,我从第一个单元格中提取学生编号,然后在数据库中查找是否存在该学生的记录: 如果我们找到学生a记录,向导将被引导更新学生数据 如果未找到学生记录,则会将新的学生记录添加到学生表中 重新执行时,这是一段非常慢的代码: prog1.Value = 0; prog2.Va

从数据库读取和写入数据时,设备的速度会呈指数级下降,而当过程重复时,速度会慢得多。有没有办法加快处理速度? 我正在用C#Windows应用程序编写一个程序 代码工作正常,没有问题,但问题只存在于速度较慢的可执行文件中。 如以下代码所述,我从第一个单元格中提取学生编号,然后在数据库中查找是否存在该学生的记录: 如果我们找到学生a记录,向导将被引导更新学生数据 如果未找到学生记录,则会将新的学生记录添加到学生表中 重新执行时,这是一段非常慢的代码:

prog1.Value = 0;
prog2.Value = 0;
prog1.Maximum = DGV1.RowCount;
string muoadNotSave = "";
prog2.Maximum = 7;
for (int i = 0; i < DGV1.RowCount; i += 5)
     {
      FlushMemory();//دالة تفريغ الذاكرة
      if (prog1.Value < DGV1.RowCount - 2)
         {
            prog1.Value += 5;
         }
         else
         {
          prog1.Value += 1;
         }
   try
        {

        if (DGV1.Rows[i].Cells[16].Value != null)
           { string name = DGV1.Rows[i].Cells[15].Value.ToString();
             int cell_no = DGV1.ColumnCount - 4;//عدد خلايا الصف
             for (int o = 0; o <= 6; o++)
                {
                 prog2.Value += 1;
                int shoabah_No = 0;
                int studenID =     
               int.Parse(DGV1.Rows[i].Cells[16].Value.ToString());
                        string ShoabahName =
               DGV1.Rows[i].Cells[cell_no].Value.ToString();
              OleDbConnection con77 = new 
              OleDbConnection(System.Configuration
             .ConfigurationManager.ConnectionStrings["acce"].ToString());
                        OleDbCommand com77 = new OleDbCommand();
                        com77.Connection = con77;
                        com77.CommandText = "SELECT * FROM Table_Shoab 
                       where shoba_name ='" + ShoabahName + "'";
                        con77.Open();
                        OleDbDataReader r77 = com77.ExecuteReader();
                        while (r77.Read())
                        {
                            shoabah_No = 
                          int.Parse(r77["shoba_id"].ToString());

                        }
                        con77.Close();

                        if (shoabah_No != 0)
                        {
             OleDbConnection con6 = new  
             OleDbConnection(System.Configuration
            .ConfigurationManager.ConnectionStrings["acce"].ToString());
                            OleDbCommand com6 = new OleDbCommand();
                            com6.Connection = con6;

                            com6.CommandText = "insert into 
                            link_stud_shobah (shoba_id,JLOS_NO) values 
                            ('" + shoabah_No + "','" + studenID + "')";
                            con6.Open();
                            com6.ExecuteNonQuery();
                            if (con6.State == ConnectionState.Open)
                                con6.Close();

                        }
                        else
                        {
                            muoadNotSave += 
                            DGV1.Rows[i].Cells[cell_no].Value.ToString()           
                            + "  " + studenID + "\n\r";
                        }


                        cell_no += -2;
                    }
                    prog2.Value = 0;



            }
                 }

                catch (Exception ex)
            {
                //MessageBox.Show(ex.ToString());
         MessageBox.Show("اما ان يكون هناك مشكلة في الاتصال او ان الطالب " 
            + " " + DGV1.Rows[i].Cells[23].Value + " " + " سبق تسجيلة ", 
                  "تنبيه");
                // MessageBox.Show("" + ex, "تنبيه");
            }
            finally
            {

            }
        }
        if (muoadNotSave != "")
        {
            MessageBox.Show("الشعب التي لم تحفظ  "+muoadNotSave, 
          "تنبيه");
        }
        else
        {           
          MessageBox.Show("تم حفظ كافة الشعب بنجاح ولله الحمد   " + 
         muoadNotSave, "تنبيه");
        }
prog1.Value=0;
prog2.值=0;
prog1.max=DGV1.RowCount;
字符串muoadNotSave=“”;
程序2.最大值=7;
对于(int i=0;i对于(int o=0;o,您正在(嵌套)循环中创建、打开和关闭
OleDbConnection
,这非常昂贵

尝试在外部循环之外执行以下操作:

OleDbConnection con77 = new OleDbConnection ..
OleDbCommand com77 = new OleDbCommand();
com77.Connection = con77;
con77.Open();
..
con77.Close();

OleDbConnection con6 = new OleDbConnection ..
OleDbCommand com6 = new OleDbCommand();
com6.Connection = con6;
con6.Open();
..
con6.Close();
此外,如果两个连接相同,则只需创建一个


不确定是什么
FlushMemory()
可以,但这也可能很昂贵,最好在主循环之后调用此函数,或者根本不调用此函数。

一般来说,最好将密集/缓慢的任务(如IO、数据库、消费服务)保持在单独的线程上,以便UI保持响应。请显示一些代码。我必须从内环调用base,因为我有从数据中查看数据梯度,我获取每一行的数据,然后在数据库中搜索,然后更新或添加到此记录,因此您应该联系获取记录数据(行)的时间。对于内存功能,请清除缓存memory@AliAlshihry是的,但是您可以在循环内执行该命令(重用相同的开放连接)在循环之前创建/打开连接(并在主循环之后关闭)。您甚至可以为整个程序创建一个连接对象,并在需要访问数据库的任何地方重用该对象。Danny先生衷心感谢您,我将应用您宝贵的提示和建议。因此,我将返回给您。