我的应用程序中有一个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);
}
}
1条答案
按热度按时间2exbekwf1#
延迟是在Oracle数据库上的一个巨大的选择上,这个查询大约4 ~ 7秒完成,这是延迟的根本原因。我对它做了一个“调整”,现在一切都好了!