jueves, 20 de febrero de 2020

Detectar consultas que producen bloqueos SQL SERVER

Los procesos bloqueados causados por bloqueos en los objetos de la base de datos son un problema común. El bloqueo asegura la integridad de los datos almacenados dentro de las bases de datos forzando cada transacción SQL Server ejecutada a pasar la prueba ACID que considera que cada transacción debe cumplir con los siguientes requerimientos:
  • Atomicidad –una transacción debe ser totalmente completada cuando se ejecuta, o no se ejecutará.
  • Consistencia – las transacciones deben crear un nuevo estado de datos que sea válido, o si cualquier fallo ocurre, debe retornar todos los datos al estado que estaba antes de que la transacción sea ejecutada/iniciada.
  • Aislamiento – una transacción que está en proceso de ejecución y no ha sido enviada aún, debe ser aislada de todas las otras transacciones.
  • Durabilidad  – los datos enviados deben ser grabados en una forma que mantendrá los datos en un estado correcto si la transacción no se completa, en el evento de una falla o un reinicio del sistema.
Como parte de la prueba ACID, el aislamiento es realizado bloqueando objetos y, como tal, el aislamiento puede afectar una o más filas de datos hasta que la transacción SQL Server que es ejecutada contra ese objeto sea enviada. Esto significa, en la práctica que, bloqueando el objeto, SQL Server evitará que cualquier otro proceso haga algún cambio contra los datos en ese objeto hasta que el bloqueo sea removido, ya sea enviando el cambio o retrotrayéndolo.

Script 1
SELECT blocking_session_id, wait_duration_ms, session_id
FROM sys.dm_os_waiting_tasks
WHERE blocking_session_id IS NOT NULL


SELECT t.text,*
FROM sys.dm_exec_connections c
CROSS APPLY sys.dm_exec_sql_text (c.most_recent_sql_handle) t
WHERE c.session_id in
(
SELECT  session_id
FROM sys.dm_os_waiting_tasks
WHERE blocking_session_id IS NOT NULL
)

martes, 18 de febrero de 2020

Collection was modified, enumeration operation may not execute XAMARIN FORMS

Este es un error bastante común: modificar una colección mientras la itera usando foreach, tenga en cuenta que foreachusa una IEnumeratorinstancia de solo lectura .
Intente recorrer la colección for()con una comprobación de índice adicional, de modo que si el índice está fuera de los límites, podrá aplicar una lógica adicional para manejarlo. También puede usar LINQ Count()como otra condición de salida de bucle evaluando el Countvalor cada vez si la enumeración subyacente no se implementa ICollection.

Solucione el problema sacando el unitofwork.save fuera del foreach

Tu eres el verdadero amor de tu vida


Cuando echas de menos a alguien y sufres por haberlo perdido tan solo recuerda que en realidad el que verdaderamente extrañas es a ti mismo y no es para menos, al perderte en el otro perdiste a su vez la conexión intima contigo, lo que echas de menos es la sensación que sientes dentro de ti cuando estabas junto a esa persona, echas de menos una parte de ti que crees que solo puedes experimentar a través del otro, sin embargo dado que eres un ser completo puedes revivir eso que tanto echas de menos aquí y ahora, simplemente cierra los ojos respira a profundidad y visualiza algún momento compartido con esa persona ya verás como a poco la sensación que echas de menos florecerá dentro de ti desde adentro con la practica dicha sensación te acompañara donde quiera que vallas estés solo o acompañado y verificaras que eso que pensabas que tenía que ver con el otro en realidad solo tiene que ver contigo mismo , a menos que sepas estar feliz estando solo jamás podrás serlo en compañía de nadie más la auténtica madurez deviene cuando comprendes que tú eres la persona más importante y el verdadero amor de tu vida.


Borja VilaSeca

jueves, 2 de enero de 2020

Cómo renovar el caché de DNS (flush DNS)

Este tutorial te mostrará cómo renovar la caché DNS comando flush DNS  utilizando varias plataformas. Al final, podrás borrar la caché DNS en máquinas con Windows, Mac y Linux.
Una caché DNS mala o desactualizada mostrará información incorrecta o un error cuando accedas a sitios web. Lo siguiente puede ocurrir debido a cambios recientes de DNS. Por lo tanto, es importante saber cómo borrar la caché de DNS con flush DNS y solucionar este problema con facilidad.

Paso 1: Iniciar la consola del símbolo del sistema de Windows

Presiona la combinación de teclas Windows + R para abrir el cuadro de diálogo Ejecutar. Escribe el siguiente comando y haz clic en el botón Aceptar:
  1. cmd
flush-dns-abrir-en-windows-cmd
Esto abrirá una ventana de símbolo del sistema.

Paso 2 – Renovar el DNS

Usa el comando ipconfig /flushdns para borrar la caché de DNS en tu computadora:

  1. ipconfig /flushdns
Espera un momento y verás una confirmación de que la memoria caché de resolución DNS se ha borrado.

lunes, 30 de diciembre de 2019

Error cursor with the name 'namecur' already exists SQLSERVER

Está utilizando un cursor global que se definirá cada vez que llame a este procedimiento y le dé el mismo error.

Definir un cursor local. Simplemente ponga la palabra clave LOCALdespués de CURSOR:



declare namecur CURSOR LOCAL FOR
...

jueves, 28 de noviembre de 2019

Exportar Lista Objeto a Excel C#



public void ExportToExcel<T>(List<T> list)
    {
        int columnCount = 0;
        DateTime StartTime = DateTime.Now;
        StringBuilder rowData = new StringBuilder();
        PropertyInfo[] properties = typeof(T).GetProperties(BindingFlags.Public | BindingFlags.Instance);
        rowData.Append("<Row ss:StyleID=\"s62\">");
        foreach (PropertyInfo p in properties)
        {
            if (p.PropertyType.Name != "EntityCollection`1" && p.PropertyType.Name != "EntityReference`1" && p.PropertyType.Name != p.Name)
            {
                columnCount++;
                rowData.Append("<Cell><Data ss:Type=\"String\">" + p.Name + "</Data></Cell>");
            }
            else
                break;
        }
        rowData.Append("</Row>");
        foreach (T item in list)
        {
            rowData.Append("<Row>");
            for (int x = 0; x < columnCount; x++) //each (PropertyInfo p in properties)
            {
                object o = properties[x].GetValue(item, null);
                string value = o == null ? "" : o.ToString();
                rowData.Append("<Cell><Data ss:Type=\"String\">" + value + "</Data></Cell>");
            }
            rowData.Append("</Row>");
        }
        var sheet = @"<?xml version=""1.0""?>
<?mso-application progid=""Excel.Sheet""?>
<Workbook xmlns=""urn:schemas-microsoft-com:office:spreadsheet""
xmlns:o=""urn:schemas-microsoft-com:office:office""
xmlns:x=""urn:schemas-microsoft-com:office:excel""
xmlns:ss=""urn:schemas-microsoft-com:office:spreadsheet""
xmlns:html=""http://www.w3.org/TR/REC-html40"">
<DocumentProperties xmlns=""urn:schemas-microsoft-com:office:office"">
<Author>MSADMIN</Author>
<LastAuthor>MSADMIN</LastAuthor>
<Created>2011-07-12T23:40:11Z</Created>
<Company>Microsoft</Company>
<Version>12.00</Version>
</DocumentProperties>
<ExcelWorkbook xmlns=""urn:schemas-microsoft-com:office:excel"">
<WindowHeight>6600</WindowHeight>
<WindowWidth>12255</WindowWidth>
<WindowTopX>0</WindowTopX>
<WindowTopY>60</WindowTopY>
<ProtectStructure>False</ProtectStructure>
<ProtectWindows>False</ProtectWindows>
</ExcelWorkbook>
<Styles>
<Style ss:ID=""Default"" ss:Name=""Normal"">
<Alignment ss:Vertical=""Bottom""/>
<Borders/>
<Font ss:FontName=""Calibri"" x:Family=""Swiss"" ss:Size=""11"" ss:Color=""#000000""/>
<Interior/>
<NumberFormat/>
<Protection/>
</Style>
<Style ss:ID=""s62"">
<Font ss:FontName=""Calibri"" x:Family=""Swiss"" ss:Size=""11"" ss:Color=""#000000""
ss:Bold=""1""/>
</Style>
</Styles>
<Worksheet ss:Name=""Sheet1"">
<Table ss:ExpandedColumnCount=""" + (properties.Count() + 1) + @""" ss:ExpandedRowCount=""" + (list.Count() + 1) + @""" x:FullColumns=""1""
x:FullRows=""1"" ss:DefaultRowHeight=""15"">
" + rowData.ToString() + @"
</Table>
<WorksheetOptions xmlns=""urn:schemas-microsoft-com:office:excel"">
<PageSetup>
<Header x:Margin=""0.3""/>
<Footer x:Margin=""0.3""/>
<PageMargins x:Bottom=""0.75"" x:Left=""0.7"" x:Right=""0.7"" x:Top=""0.75""/>
</PageSetup>
<Print>
<ValidPrinterInfo/>
<HorizontalResolution>300</HorizontalResolution>
<VerticalResolution>300</VerticalResolution>
</Print>
<Selected/>
<Panes>
<Pane>
<Number>3</Number>
<ActiveCol>2</ActiveCol>
</Pane>
</Panes>
<ProtectObjects>False</ProtectObjects>
<ProtectScenarios>False</ProtectScenarios>
</WorksheetOptions>
</Worksheet>
<Worksheet ss:Name=""Sheet2"">
<Table ss:ExpandedColumnCount=""1"" ss:ExpandedRowCount=""1"" x:FullColumns=""1""
x:FullRows=""1"" ss:DefaultRowHeight=""15"">
</Table>
<WorksheetOptions xmlns=""urn:schemas-microsoft-com:office:excel"">
<PageSetup>
<Header x:Margin=""0.3""/>
<Footer x:Margin=""0.3""/>
<PageMargins x:Bottom=""0.75"" x:Left=""0.7"" x:Right=""0.7"" x:Top=""0.75""/>
</PageSetup>
<ProtectObjects>False</ProtectObjects>
<ProtectScenarios>False</ProtectScenarios>
</WorksheetOptions>
</Worksheet>
<Worksheet ss:Name=""Sheet3"">
<Table ss:ExpandedColumnCount=""1"" ss:ExpandedRowCount=""1"" x:FullColumns=""1""
x:FullRows=""1"" ss:DefaultRowHeight=""15"">
</Table>
<WorksheetOptions xmlns=""urn:schemas-microsoft-com:office:excel"">
<PageSetup>
<Header x:Margin=""0.3""/>
<Footer x:Margin=""0.3""/>
<PageMargins x:Bottom=""0.75"" x:Left=""0.7"" x:Right=""0.7"" x:Top=""0.75""/>
</PageSetup>
<ProtectObjects>False</ProtectObjects>
<ProtectScenarios>False</ProtectScenarios>
</WorksheetOptions>
</Worksheet>
</Workbook>";
        System.Diagnostics.Debug.Print(StartTime.ToString() + " - " + DateTime.Now);
        System.Diagnostics.Debug.Print((DateTime.Now - StartTime).ToString());
        string attachment = "attachment; filename=Report.xml";
        HttpContext.Current.Response.ClearContent();
        HttpContext.Current.Response.AddHeader("content-disposition", attachment);
        HttpContext.Current.Response.Write(sheet);
        HttpContext.Current.Response.ContentType = "application/ms-excel";
        HttpContext.Current.Response.End();
    }




USO DEL METODO:

  ExportToExcel(TuLista);

martes, 26 de noviembre de 2019

Llenar control DevExpress.XtraBars.BarEditItem (How to bind it to a data source)


public UCOpciones()
        {
            InitializeComponent();
            LISTAPARALLENARCOMBO dataAreaList = new LISTAPARALLENARCOMBO();
            KernelOperation.DataAreabynbAlias(LISTAPARALLENARCOMBO, Program.UserInfo.Username);      

            foreach(var empresa in LISTAPARALLENARCOMBO)
            {
                (barEditItemEmpresa.Edit as RepositoryItemComboBox).Items.Add(empresa.cveCia);
            }  
         //SELECCIONAR VALOR     
            barEditItemEmpresa.EditValue = Program.cveCiaCurrent == null ?  Program.UserInfo.CompanyCode : Program.cveCiaCurrent;
          
            Recargar();
        }