Ir al contenido principal

Usar GetData.DataTableAppend() en lugar de UNION ALL

Algunas veces usamos UNION ALL de SQL para unir el resultado de varias consultas en un mismo conjunto de datos, pero tiene el inconveniente de que es muy lento ya que mantiene los candados en la base de atos por mientras efectua toda la consulta.

Una mejor manera de hacer esto es usar el Metodo DataTableAppend() de la clase GetData();

Por ejemplo, si tenemos dos consultas SQL:

Por ejemplo, si tenemos dos consultas SQL:

"SELECT customer_id, customer_name FROM customer WHERE cost_center = 'DIS-A'"

y

"SELECT customer_id, customer_name FROM customer WHERE cost_center = 'CCI'"

con SQL seria:
GetData() gt = new GetData();

gt.SentenciaSQL = "SELECT customer_id, customer_name "
+ "FROM customer WHERE cost_center = 'DIS-A' "
+"UNION ALL "
+ "SELECT customer_id, customer_name "
+ "FROM customer "
+ "WHERE cost_center = 'CCI'";
DataTable dt = gt.GetDataTable();

en cambio con DataTableAppend() sería:
GetData() gt = new GetData();

gt.SentenciaSQL = "SELECT customer_id, customer_name "
+ "FROM customer "
+ "WHERE cost_center = 'DIS-A'"

DataTable dt = gt.GetDataTable();

gt.SentenciaSQL = "SELECT customer_id, customer_name "
+ "FROM customer "
+ "WHERE cost_center = 'CCI'"

dt = gt.DataTableAppend(dt, gt.GetDataTable());

Aunque es un poco mas de código la solución es mas eficiente ya que no mantiene los candados de la base de datos por mucho tiempo.

Comentarios

Entradas más populares de este blog

Eliminar registros repetidos de una DataTable

A continuación les muestro un ejemplo de como eliminar los registros repetidos de una DataTable . //DataTable con los reqistros repetidos (myRepeatedData) //Filtramos los registros únicos en la variable var. var uniqueRows = myRepeatedData.AsEnumerable().Distinct(DataRowComparer.Default); //Lo copiamos a otra DataTable DataTable myUniqueData = uniqueRows.CopyToDataTable(); Con esto tendremos en la DataTable myUniqueData los registros únicos.

Obtener el valor de un control ASPxSpinEdit dentro de un ASPxGridView

Para obtener el valor de un control ASPxSpinEdit dentro de un ASPxGridView -Agregar un control ASPxSpinEdit dentro del DataItem Template -Hacer que se muestren los datos de la fuente poniendo en el atributo value la expressión siguiente: ' <%# Bind("GroupCode") %> '  donde GroupCode es el nombre de la columna en la fuente de datos. -Hacer que el evento ValueChanged se procese en el servidor agregando lo siguiente en los eventos del cliente:   <ClientSideEvents ValueChanged="function(s, e) {  e.processOnServer = true; }" /> El markup completo de la columna quedaría así: <dx:GridViewDataTextColumn Caption="Grupo" FieldName="GroupCode" ShowInCustomizationForm="True" VisibleIndex="4">    <PropertiesTextEdit DisplayFormatInEditMode="True" DisplayFormatString="g">    </PropertiesTextEdit>    <DataItemTemplate>       <dx:ASPxSpinEdit ID="spinEdi...

Mostrar un Loading Panel al cargar y al procesar los datos que consuman mucho tiempo de proceso

Primero hay que crear el Panel como en el siguiente ejemplo: <dx:ASPxLoadingPanel ID="loadingPanel" ClientInstanceName="loadingPanel" runat="server" Modal="true"         Width="70%" Height="30px" Text="Se está procesando su petición; por favor no abandone la sesión porque podría tener inconsistencia en sus datos..." >     </dx:ASPxLoadingPanel> Crear una función con Javascript que muestre el panel :  function showLoadingPanel() {         loadingPanel.Show();     } Si se desea que solo muestre el panel encima de un control como el ASPxGridview se puede usar el método ShowInElementByID del Panel: function showLoadingPanel() {         loadingPanel.ShowInElementByID(grvHarnessItems.name);     } Crear una función con Javascript que esconda el panel:   function OnControlsInitialized(s, e) {         setTimeout(function () {   ...