winforms 使用OracleDataAccess.Fill(数据表)更新DataGridView需要很长时间

t40tm48m  于 2022-11-17  发布在  Oracle
关注(0)|答案(1)|浏览(103)

我的应用程序中有一个DataGridView,它也有一个执行oracle函数并获取数据的函数。但是当返回的数据很大时,每次刷新都需要20到40秒来处理和填充表,直到数据量减少。这些表大约有12列,当处理超过50到60行时就会出现问题。
oracle中的查询相当简单,没有表现出如此缓慢的速度。有没有任何替代方法或任何方法来优化这个过程?我更新表,因为应用程序在第一个位置一次使用一个数据。
Get函数:

public DataTable GetWorkList(int ordenamiento)
        {
            DataTable dtTemp = new DataTable();            

            OracleConnection oraConn = new 
            OracleConnection(this.mesParameters.DBConnectionString);
            OracleCommand oraComm = new OracleCommand();
            OracleDataAdapter oraDA = new OracleDataAdapter();
            OracleParameter oraParam;
            OracleParameter oraParamReturn;

            //Logger.Info("Procedure GETWORKLIST BEGIN");

            try
            {
                oraComm.Connection = oraConn;
                oraComm.BindByName = true;
                oraComm.CommandType = CommandType.StoredProcedure;                                

                oraComm.CommandText = "PG_SL_IPR_WORKLIST_RF3";

                oraParam = new OracleParameter("PR_ORDER", OracleDbType.Int32, ordenamiento, ParameterDirection.Input);
                oraComm.Parameters.Add(oraParam);

                oraParamReturn = new OracleParameter("RETURN", OracleDbType.RefCursor, ParameterDirection.ReturnValue);
                oraComm.Parameters.Add(oraParamReturn);

                
                oraConn.Open();
                //Logger.Info("conexão aberta");
                //Logger.Info("oraDA Select BEGIN");
                oraDA.SelectCommand = oraComm;
                //Logger.Info("oraDA Select END");

                //Logger.Info("FILL BEGIN");
                oraDA.Fill(dtTemp);
                //Logger.Info("FILL END");
            }
            catch (Exception ex)
            {
                this.mesMessages.OKButtonMessage("GetWorkList\r\n" + ex.Message, "MES", System.Windows.Forms.MessageBoxIcon.Error);
            }
            finally
            {
                if(oraConn.State == ConnectionState.Open)
                {
                    oraConn.Close();
                    //Logger.Info("conexão fechada");
                }
            }
            //Logger.Info("Procedure GETWORKLIST END");
            return dtTemp;
        }

设置数据网格视图

public void SetDataGridView(Parameters prParameters, DataTable prTableInfo, String prTableConfigName)
        {
            DataGridViewColumn dgvColumn;
            String[] strConfigColumnValues;

            try
            {
                this.Columns.Clear();

                for (Int16 i = 0; i < prTableInfo.Columns.Count; i++)
                {
                    // Get the config values for each column in order according the query
                    strConfigColumnValues = prParameters.GetParameter(prTableConfigName, prTableInfo.Columns[i].ColumnName.Trim().Replace(' ', '_').ToUpper()).Split('-');

                    dgvColumn = new DataGridViewTextBoxColumn();

                    dgvColumn.DataPropertyName = prTableInfo.Columns[i].ColumnName;
                    dgvColumn.Name = prTableInfo.Columns[i].ColumnName.Trim().Replace(' ', '_').ToUpper();
                    dgvColumn.HeaderText = strConfigColumnValues[0].Trim();
                    dgvColumn.Width = Convert.ToInt32(strConfigColumnValues[1].Trim());
                    dgvColumn.ReadOnly = Convert.ToBoolean(strConfigColumnValues[2].Trim());
                    dgvColumn.Visible = Convert.ToBoolean(strConfigColumnValues[3].Trim());

                    dgvColumn.Resizable = DataGridViewTriState.False;
                    dgvColumn.SortMode = DataGridViewColumnSortMode.NotSortable;

                    this.Columns.Add(dgvColumn);
                }

                this.DataSource = prTableInfo;
            }
            catch (Exception ex)
            {                
                message.OKButtonMessage(ex.Message);
            }
        }
2exbekwf

2exbekwf1#

延迟是在Oracle数据库上的一个巨大的选择上,这个查询大约4 ~ 7秒完成,这是延迟的根本原因。我对它做了一个“调整”,现在一切都好了!

相关问题