jueves, 26 de agosto de 2021

¿Se pueden cambiar los mensajes de error de asp.net MVC del ingles al español?

Como sabemos por defecto asp.Net MVC 5 los mensajes de error por defecto estan en ingles; como sabemos estos se muestran en el ValidationSummary es posible cambiarlos a español de una forma muy sencilla:

  1. Instalar el paquete de idioma en español en Manage Nuget Packages llamado
    • Microsoft.AspNet.Identity.core.es
  2. Después de dentro del archivo web.config del proyecto buscamos la etiqueta <system.web> y dentro de ella agregamos la siguiente linea:
    • <globalization culture="es-MX" uiCulture="es" />
Listo con esto los mensajes de nuestra aplicación aparecerán en español.

Espero les sea útil.

jueves, 5 de agosto de 2021

Carga diferida (Lazy Loading) en Entity Framework

Como sabemos la por defecto Entity Framework carga los datos relacionados con llaves al general una consulta; esto puede llevar mas tiempo de procesador y hace mas tardada.

Desactivándola  podremos cargar datos mas rápidamente.

public partial class DBEntities : DbContext

{

    public SchoolDBEntities(): base("name=DBEntities")

    {

        this.Configuration.LazyLoadingEnabled = false;

    }

 

    protected override void OnModelCreating(DbModelBuilder modelBuilder)

    {

    }

}

También se puede sobre cargar el método del constructor del contexto para activar y desactivarlo según lo necesitemos:

public partial class DBEntities : DbContext

{

    public SchoolDBEntities(): base("name=DBEntities")

    {

        this.Configuration.LazyLoadingEnabled = false;

    }

 

    public SchoolDBEntities(bool LazyLoadingEnabled): base("name=DBEntities")

    {

        this.Configuration.LazyLoadingEnabled = LazyLoadingEnabled;
    }

 

    protected override void OnModelCreating(DbModelBuilder modelBuilder)

    {

    }

}


miércoles, 28 de julio de 2021

Truncar y reducir el tamaño del log de transacciones de SQL Server

Siempre es requerido estar revisando el tamaño de nuestros archivos de base de datos, los archivos de Log pueden crecer de forma diferente al archivo de datos de una base de datos; este archivo puede limpiarse para liberar espacio en nuestro servidor.

El truncamiento del registro de transacciones (log de transacciones)  elimina de manera lógica  los archivos de registro de transacciones  de una base de datos de SQL Server, El truncamiento del registro no reduce el tamaño del archivo de registro físico.

Para reducir el tamaño físico de un archivo de registro físico; la única forma es realizando una copia de seguridad de registros y después realizar el truncado del registro.

Para truncar el log es muy sencillo simplemente se siguen los siguientes pasos:

Paso1: Para truncar el registro de transacciones, se realiza la  copia de seguridad del registro de transacciones.

BACKUP LOG [BasedeDatos] TO  DISK = N'C:\Backup\Backup.bak'

Paso2: Reducir el tamaño físico del registro de transacciones:

USE [BasedeDatos]

GO

DBCC SHRINKFILE (N'nombredelLog', 0, TRUNCATEONLY)

GO

Si no conoces el nombre del archivo de registros podemos usar la instrucción:
Select * from Sys.database_files

domingo, 18 de junio de 2017

Exportar Datagrid a Excel C#

Hola Exportar a Excel es algo muy común que requieren nuestras aplicaciones que trabajan con datos, siempre es útil poder permitir a nuestros usuarios manipular sus datos desde excel

Primero que nada es necesario importar la librería de Office:

using Microsoft.Office.Interop.Excel;

General mente se encuentra en:


C:\Program Files (x86)\Microsoft Visual Studio 14.0\Visual Studio Tools for Office\PIA\Office15\Microsoft.Office.Interop.Excel.dll

La función es la siguiente:

public void _Exportar(System.Data.DataTable dgvDatos)
        {

            try
            {
                string temp;
                int iColumnas = 0;
                //Inicializacion de la conexion
                Microsoft.Office.Interop.Excel.Application xlsApp = new Microsoft.Office.Interop.Excel.Application();
             
                //Objento de Sheet
                Worksheet xlsSheet;
                //Objento de Libro
                Workbook xlsBook;
                //Indica si se ve el Excel o no
                xlsApp.Visible = false;

                xlsBook = xlsApp.Workbooks.Add(true);
                xlsSheet = (Worksheet)xlsBook.ActiveSheet;

                //Inicia a leer el datagrid para preparar la cabecera
                for (int iCol = 0; iCol < dgvDatos.Columns.Count; iCol++)
                {
                    iColumnas++;
                    //Agrega la cabecera a la hoja
                    xlsSheet.Cells[1, iColumnas] = dgvDatos.Columns[iCol].ColumnName;
                }

                for (int iRow = 0; iRow < dgvDatos.Rows.Count; iRow++)
                {
                    int Col = 0;
                    for (int iCol = 0; iCol < dgvDatos.Columns.Count; iCol++)
                    {
                        Col++;
                        temp = dgvDatos.Rows[iRow].ItemArray[iCol].ToString();
                        xlsSheet.Cells[iRow + 2, Col] = temp;

                    }
                }

                xlsSheet.Columns.AutoFit(); //Ajusta ancho de todas las columnas
                xlsApp.Visible = true;
                //xlsApp.Quit();
            }
            catch (Exception ex)
            {
                MessageBox.Show("Error: " + ex.Message, "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

Espero les sea útil.

martes, 25 de agosto de 2015

NotifyIcon ocultar aplicación en el área de notificación de Windows

Separar un String en torno a otro (Split con String)
Ocultar nuestro programa en la barra de tareas es algo que podemos usar cueando un programa no requiere de supervision o queremos que se ejecute en segundo plano pudiendo acceder a  el en cualquier momento.

Para lo cual se usa una conjunción de los componenetes notifyIcon y contextMenuStrip

        private void ejecutarLimpiezaToolStripMenuItem_Click(object sender, EventArgs e)
        {
            //Tipo de icono a mostrar el el globo informativo (Info, Error, None, Warning)
            notifyIcon1.BalloonTipIcon = ToolTipIcon.Info;
            //Título del balón informativo (el nombre de la aplicación)
            notifyIcon1.BalloonTipTitle = Application.ProductName;
            //Texto del balón informativo
            notifyIcon1.BalloonTipText = "Ejecutado limpieza";
            //Tiempo que aparecerá hasta ocultarse automáticamente
            notifyIcon1.ShowBalloonTip(3);
            listBox1.Items.Clear();
            listFiles(textBox1.Text);
            LogFile();
            notifyIcon1.BalloonTipIcon = ToolTipIcon.Info;
            notifyIcon1.BalloonTipTitle = Application.ProductName;
            notifyIcon1.BalloonTipText = "Limpieza terminada";
            notifyIcon1.ShowBalloonTip(8);
        }

        private void terminarAplicacionToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Application.Exit();
        }

        private void mostrarAplicacionToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Show();
            WindowState = FormWindowState.Normal;
            Activate();
            notifyIcon1.Visible = false;
        }

        private void button4_Click(object sender, EventArgs e)
        {
            notifyIcon1.Icon = this.Icon;
            notifyIcon1.ContextMenuStrip = this.contextMenuStrip1;
            notifyIcon1.Text = Application.ProductName;
            notifyIcon1.Visible = true;
            this.Visible = false;

            notifyIcon1.BalloonTipIcon = ToolTipIcon.Info;
            notifyIcon1.BalloonTipTitle = Application.ProductName;
            notifyIcon1.BalloonTipText = "La aplicación ha quedado ocultada " +
                "en el área de notificación. Para mostrarla haga " +
                "doble clic sobre el icono";
            notifyIcon1.ShowBalloonTip(8);
        }

        private void Form1_Resize(object sender, EventArgs e)
        {
            if (this.WindowState == FormWindowState.Minimized)
            {
                notifyIcon1.Icon = this.Icon;
                notifyIcon1.ContextMenuStrip = this.contextMenuStrip1;
                notifyIcon1.Text = Application.ProductName;
                notifyIcon1.Visible = true;
                this.Visible = false;

                notifyIcon1.BalloonTipIcon = ToolTipIcon.Info;
                notifyIcon1.BalloonTipTitle = Application.ProductName;
                notifyIcon1.BalloonTipText = "La aplicación ha quedado ocultada " +
                    "en el área de notificación. Para mostrarla haga " +
                    "doble clic sobre el icono";
                notifyIcon1.ShowBalloonTip(8);
            }
        }

        private void notifyIcon1_DoubleClick(object sender, EventArgs e)
        {
            Show();
            WindowState = FormWindowState.Normal;
            Activate();
            notifyIcon1.Visible = false;
        }

viernes, 21 de agosto de 2015

Enviado Correo electronico desde C#

Separar un String en torno a otro (Split con String)
Para enviar correo electrónico desde nuestro código de forma muy sencilla.Para hacerlo necesitaremos 3 objetos o clases integradas en el Framework de .NET :

- System.Net.Mail.MailMessege: Nos permite encapsular todos las propiedades de nuestro mensaje.

- System.Net.Mail.MailAddress: Representa una dirección de correo electrónico.

- System.Net.Mail.SmtpClient: Representa un cliente de correo electrónico basado en el protocolo SMTP.

Veamos el codigo:

    public void EnviarCorreo()
    {
        /*-------------------------MENSAJE DE CORREO Objeto MailMessage----------------------*/
        //Creamos un nuevo Objeto de mensaje
        System.Net.Mail.MailMessage mmsg = new System.Net.Mail.MailMessage();

        //Direccion de correo electronico a la que queremos enviar el mensaje pueden agregarse tantos destinatarios como sea posible mediante la función Add ya que es una coleccion
        mmsg.To.Add("destinatario@servidordominio.com");

        //msg.To.Add("destinatario2@servidordominio.com");
        //msg.To.Add("destinatario3@otrodominio.com");


        //Asunto
        mmsg.Subject = "Asunto del correo";
        mmsg.SubjectEncoding = System.Text.Encoding.UTF8;

        //Direccion de correo electronico que queremos que reciba una copia del mensaje si es que se requiere esto es opcional
        mmsg.Bcc.Add("destinatariocopia@servidordominio.com"); 

        //Cuerpo del Mensaje
        mmsg.Body = "Texto del contenio del mensaje de correo";
        mmsg.BodyEncoding = System.Text.Encoding.UTF8;
        mmsg.IsBodyHtml = false; //Si no queremos que se envíe como HTML se pone en true si se crea el cuerpo con HTML esto noda una amplia funcion en los formatos de correos.

        //Correo electronico desde la que enviamos el mensaje
        mmsg.From = new System.Net.Mail.MailAddress("micuenta@servidordominio.com");


        /*-------------------------CLIENTE DE CORREO Objeto SmtpClient---------------------*/

        //Creamos un objeto de cliente de correo
        System.Net.Mail.SmtpClient cliente = new System.Net.Mail.SmtpClient();

        //Hay que crear las credenciales del correo emisor es decir el acceso de nuestro correo electronico
        cliente.Credentials = new System.Net.NetworkCredential("micuenta@servidordominio.com", "micontraseña");

        //Lo siguiente es obligatorio si enviamos el mensaje desde Gmail o servidores que usan SSL
        /*
        cliente.Port = 587;  
        cliente.EnableSsl = true;
        */

        cliente.Host = "mail.servidordominio.com"; 


        /*-------------------------ENVIO DE CORREO----------------------*/

        try
        {
            //Enviamos el mensaje      
            cliente.Send(mmsg);
        }
        catch (System.Net.Mail.SmtpException ex)
        {
            //Aquí gestionamos los errores al intentar enviar el correo
        }
    }

Determinar si tu laptop usa esta usado la bateria o la corriente usando C#

Separar un String en torno a otro (Split con String)
Para algunos procesos es indispensable poder saber si se usa la batería o el nivel de carga si se esta usando una laptop por ejemplo para no dejar a medias un proceso por falta de batería que pueda dejar colgado el servidor o algo parecido... podemos incluir en nuestras aplicaciones un método para evitar esto; yo en mi caso lo usare para saber en que momento una lap se cambia a la batería lap que dejo conectada para hacer respaldos pero si se va la luz en la noche cambiara a la batería y quiero que me avise para apagar bien los servidores y evitar perdida de información por daños..

C#


private void btnPower_Click(object sender, EventArgs e)
{
   PowerLineStatus status = SystemInformation.PowerStatus.PowerLineStatus;
    if (status == PowerLineStatus.Offline)
        MessageBox.Show("Utilizando Bateria");
    else
        MessageBox.Show("Corriente directa");


}