Aquesta funció pertany a la clsDades i funciona igual que la GET però limita el nombre de files retornades a les que se li passen per paràmetre. Perque és necessària? Suposem que tenim un procés que ha de processar (valgui la redundància) 50.000 registres, això ho retorna el GET sense problemes. Però quan porta 10.000 processats en una aplicació web dóna un timeout. Llavors és necessari processar de 5.000 en 5.000 registres. Durant el procés el registres poden canviar d'estat (per exemple) i així evitar tornar a ser seleccionats a la següent crida del GETTOP. Cada cop que es processa un conjunt de registres es pot enviar a la UI un missatge indicant que encara queden per processar, la UI pot actualitzar alguna barra de progrés o similar i llestos (haurà fet un COUNT per saber el total). La funció té els mateixos paràmetres que el GET amb un afegit que és el número de registres a retornar.
public DataTable GETTOP(int TOP, Dictionary<string, string> Params)
{
SqlDataReader Reader = null;
DataTable Result = new DataTable();
bool LocalConn;
SqlConnection Conn = null;
if (SQLConn == null)
{
LocalConn = true;
Conn = new SqlConnection(CadConnBBDD);
Conn.Open();
}
else
{
LocalConn = false;
Conn = SQLConn;
}
SqlCommand SqlComm = new SqlCommand();
SqlParameter SqlParam;
SqlComm.Connection = Conn;
if (SQLTrans != null) SqlComm.Transaction = SQLTrans;
SqlComm.CommandType = CommandType.StoredProcedure;
SqlComm.CommandText = spGET + "TOP";
SqlParameter pTOP = new SqlParameter("numRows", SqlDbType.BigInt);
pTOP.Direction = ParameterDirection.Input;
pTOP.Value = TOP;
SqlComm.Parameters.Add(pTOP);
foreach (clsCamp Camp in ParamsGET)
{
SqlParam = CreaParametre(Camp, false);
if (Params.Keys.Contains<string>(Camp.NomCamp))
{
if (string.IsNullOrEmpty(Params[Camp.NomCamp])) SqlParam.Value = DBNull.Value;
else SqlParam.Value = Params[Camp.NomCamp];
}
else SqlParam.Value = DBNull.Value;
SqlComm.Parameters.Add(SqlParam);
}
Reader = SqlComm.ExecuteReader();
Result.Load(Reader);
Reader.Close();
if (LocalConn)
{
Conn.Close();
Conn.Dispose();
Conn = null;
}
return Result;
}
|