- Instalar el paquete de idioma en español en Manage Nuget Packages llamado
- Microsoft.AspNet.Identity.core.es
- 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" />
Ya que ando como loco metido buscando y solucionando problemas de informática tanto de programación como de TI en general, pondré aquí lo que me ha sido de utilidad y algunas preguntas por si alguno desea ayudamre ;). Espero que yo les sea de ayuda ...
jueves, 26 de agosto de 2021
¿Se pueden cambiar los mensajes de error de asp.net MVC del ingles al español?
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
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
domingo, 18 de junio de 2017
Exportar Datagrid a Excel C#
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
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#
- 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#
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");
}
lunes, 27 de julio de 2015
Contenido de un listbox a un archivo plano
Para agregar los items de ubn list box a un archivo es muy sencillo se usa el siguiente codigo:
private void BtnToCSV_Click(object sender, EventArgs e)
{
String Correccion = "";
foreach (String Line in listBox2.Items)
{
Correccion = Correccion + Line + "\n";
}
SaveFileDialog dlg = new SaveFileDialog();
dlg.Filter = "csv files (*.csv)|*.csv";
dlg.Title = "Export in CSV format";
if (dlg.ShowDialog() == DialogResult.OK)
{
if (dlg.FileName != "")
{
//Pass the filepath and filename to the StreamWriter Constructor
StreamWriter sw = new StreamWriter(dlg.FileName);
//Write a line of text
sw.Write(Correccion);
//Close the file
sw.Close();
}
}
}
Separar un String en torno a otro (Split con String)
Para poder realizar una separación de cadena usando otra cadena , es muy sencillo solo hay que usar la fucion: public string[] Split( string[] separator, StringSplitOptions options ) creado un String[] de un solo elemento el que deseamos separar ejemplo:
using System;
public class SplitTest {
public static void Main() {
string CadenaCompleta= "Esta a es la cadena que separeaemos a partir de aqui.... esta seria la parte separada";
string[] stringSeparators = new string[] { "aqui...." };
string [] split = CadenaCompleta.Split(stringSeparators, StringSplitOptions.RemoveEmptyEntries);
foreach (string s in split) {
if (s.Trim() != "")
Console.WriteLine(s);
}
}
}
Esto nos separá la cadena por medio del palabra "aqui...."
sábado, 11 de julio de 2015
¿Conoces el “Modo Dios” de Windows?
El “Modo Dios” está disponible en Windows Vista, Windows 7, Windows 8 y Windows 8.1.
¿Qué es el “Modo Dios”?
El “Modo Dios” es una especie de centro de mando oculto que agrupa en un mismo lugar alrededor de 270 accesos directos a opciones de configuración de Windows (depende del equipo). Desde este centro de mando puedes controlar cualquier aspecto que se te ocurra de tu PC: credenciales, la barra de tareas, el centro de actividades, las cuentas de usuario, idiomas… y la lista sigue. Cualquier aspecto configurable, ahí está.
¿Cómo se activa el “Modo Dios”?
La verdad es que de lo sencillo que es, da casi hasta risa. Sigue estos pasos para activarlo:
- Crea una nueva carpeta. Puede ser en el Escritorio o dentro de otra carpeta. Donde tú quieras.
- Nombra la carpeta así: ModoDios.{ED7BA470-8E54-465E-825C-99712043E01C}
- Automáticamente, el icono de la carpeta cambiará, mostrando el icono del Panel de Control y el nombre ModoDios. Ahora puedes darle el nombre que quieras:
- Entra en la nueva carpeta y explora todas las opciones que hay. Puedes cambiar la vista de los iconos y organizarlos a tu antojo
lunes, 8 de junio de 2015
Respaldo de Configuración IIS
Realizar una copia de respaldo
Lo primero seria iniciar la sesion como administrador y abrir una consola de comandos (cmd.exe),ya dentro de la consola se debe cambiar el directorio: c:\windows\system32\inetsrvMicrosoft Windows [Versión 6.1.7600]
Copyright (c) 2009 Microsoft Corporation. Reservados todos los derechos.
C:\Users\Administrador>cd \
C:\>cd Windows\system32\inetsrv
C:\Windows\System32\inetsrv>_
Una vez que no encontremos situados en esta carpeta aremos uso de la herramienta: appcmd.exe
para realizar el respaldo.
Si se desea mas informaicon sobre el uso de este comando se puede visitar la siguiente dirección:
Comando appcmd.exe
Para ello usaremos el comando appcmd.exe add backup ["nombre del respaldo"]
C:\Windows\System32\inetsrv>appcmd.exe add backup "Respaldo 02062015"
Se agregó el objeto de BACKUP "Respaldo 02062015"
Una vez ejecutado el comando de forma existosa pasamos a comprobar la creacion:
C:\Windows\System32\inetsrv>appcmd.exe list backup
BACKUP "Respaldo 02062015"
BACKUP "CFGHISTORY_0000000120"
BACKUP "CFGHISTORY_0000000121"
BACKUP "CFGHISTORY_0000000122"
BACKUP "CFGHISTORY_0000000123"
BACKUP "CFGHISTORY_0000000124"
BACKUP "CFGHISTORY_0000000125"
BACKUP "CFGHISTORY_0000000126"
BACKUP "CFGHISTORY_0000000127"
BACKUP "CFGHISTORY_0000000128"
BACKUP "CFGHISTORY_0000000129"
C:\Windows\System32\inetsrv>
los archivos para respladar quedan en el subdirectorio BACKUP y dentro tendra un sub direcotrio con el nombre del respaldo.
C:\Windows\System32\inetsrv>cd backup
C:\Windows\System32\inetsrv\backup>dir
El volumen de la unidad C no tiene etiqueta.
El número de serie del volumen es: 28E4-8D99
Directorio de C:\Windows\System32\inetsrv\backup
02/06/2015 05:53 p.m. <DIR> .
02/06/2015 05:53 p.m. <DIR> ..
02/06/2015 05:53 p.m. <DIR> Respaldo 02062015
0 archivos 0 bytes
3 dirs 85,856,223,232 bytes libres
C:\Windows\System32\inetsrv\backup>cd "Respaldo 02062015"
C:\Windows\System32\inetsrv\backup\Respaldo 02062015>dir
El volumen de la unidad C no tiene etiqueta.
El número de serie del volumen es: 28E4-8D99
Directorio de C:\Windows\System32\inetsrv\backup\Respaldo 02062015
02/06/2015 05:53 p.m. <DIR> .
02/06/2015 05:53 p.m. <DIR> ..
20/03/2014 02:52 p.m. 25,094 administration.config
25/03/2015 02:13 p.m. 88,139 applicationHost.config
08/09/2011 01:22 a.m. 266,906 MBSchema.xml
01/06/2015 07:16 p.m. 10,515 MetaBase.xml
08/09/2011 01:22 a.m. 490 redirection.config
02/06/2015 05:53 p.m. <DIR> schema
5 archivos 391,144 bytes
3 dirs 85,849,747,456 bytes libres
C:\Windows\System32\inetsrv\backup\Respaldo 02062015>
Si llegamos a tener un contratiempo, el servidor de daña o tenemos la necesidad de restaurarlo simplemente copiaremos los archivos de los sitios a las carpetas en las rutas correspondientes y el de backup de configuración a la ruta señalada revisameos que se reconosca y ejecutamos el comando para correr el respaldo.
C:\Windows\System32\inetsrv>appcmd.exe list backup
BACKUP "Respaldo 02062015"
BACKUP "CFGHISTORY_0000000120"
BACKUP "CFGHISTORY_0000000121"
BACKUP "CFGHISTORY_0000000122"
BACKUP "CFGHISTORY_0000000123"
BACKUP "CFGHISTORY_0000000124"
BACKUP "CFGHISTORY_0000000125"
BACKUP "CFGHISTORY_0000000126"
BACKUP "CFGHISTORY_0000000127"
BACKUP "CFGHISTORY_0000000128"
BACKUP "CFGHISTORY_0000000129"
c:\Windows\System32\inetsrv>appcmd.exe restore backup "Respaldo 02062015"
Configuración restaurada de la copia de seguridad "Respaldo 02062015"
c:\Windows\System32\inetsrv>
Con eso revisamos que la carpeta que copiamos ha sido reconocida. ahora procederemos a iniciar el la restauracion del respaldo para ello usaremos el comando appcmd.exe add backup ["nombre del respaldo"]
Si el mensaje es satisfactorio hemos restaurado la configuración de nuestro IIS
miércoles, 3 de junio de 2015
Cifrado y descifrado simétrico con Rijndael (AES) utilizando C#/
Este tipo de algoritmos se pueden usar tanto para cifrar cadenas como archivos empecemos por las cadenas:
Implementación sobre cadenas (Strings)
La Implementación de este Algoritmo requiere los namespaces:
using System;
using System.Security.Cryptography;
using System.Text;
using System.IO;
Clave y Vector de Inicio
Estos Valores son los que determinan la encripcion del algoritmo, estos valores pueden ser especificados manualmente o de manera automática por le mismo FrameWork La implementación queda definida por el siguiente código:
Rijndael rijndael = Rijndael.Create();
byte[] key = rijndael.Key;
byte[] iv = rijndael.IV;
Es posible forzar la generación de nuevas claves y números de vectores de inicio para para el algoritmo utilizando los metodos rijndael.GenerateKey() y rijndael.GenerateIV() respectivamente.
Si el usuario o programador desea insertar los datos para estos valores se usaran las variables strKey y strIv
byte[] key = UTF8Encoding.UTF8.GetBytes(strKey);
byte[] iv = UTF8Encoding.UTF8.GetBytes(strIv);
Especificando estos valores manualmente es necesario garantizar que sus longitudes sean válidas para el algoritmo. En este caso se utilizará una longitud de clave de 32 bits y una longitud de vector de inicio de 16 bits.
Cifrado de cadenas de texto.
- Cadena de texto con los datos a cifrar.
- Clave.
- Vector de inicio.
////// /// Cifrado de Cadenas de Texto /// /// Mensaje a Cifrar /// Valor de la llave /// Vector de Inicio ///public static string encryptString(String plainMessage, byte[] Key, byte[] IV) { Rijndael RijndaelAlg = Rijndael.Create(); MemoryStream memoryStream = new MemoryStream(); CryptoStream cryptoStream = new CryptoStream(memoryStream, RijndaelAlg.CreateEncryptor(Key, IV), CryptoStreamMode.Write); byte[] plainMessageBytes = UTF8Encoding.UTF8.GetBytes(plainMessage); cryptoStream.Write(plainMessageBytes, 0, plainMessageBytes.Length); cryptoStream.FlushFinalBlock(); byte[] cipherMessageBytes = memoryStream.ToArray(); memoryStream.Close(); cryptoStream.Close(); return Convert.ToBase64String(cipherMessageBytes); }
Descifrado de cadenas de texto.
////// Descifrado de cadenas de texto /// /// Mensaje Encriptado /// Valor de la llave /// Vector de Inicio ///public static string decryptString(String encryptedMessage, byte[] Key, byte[] IV) { byte[] cipherTextBytes = Convert.FromBase64String(encryptedMessage); byte[] plainTextBytes = new byte[cipherTextBytes.Length]; Rijndael RijndaelAlg = Rijndael.Create(); MemoryStream memoryStream = new MemoryStream(cipherTextBytes); CryptoStream cryptoStream = new CryptoStream(memoryStream, RijndaelAlg.CreateDecryptor(Key, IV), CryptoStreamMode.Read); int decryptedByteCount = cryptoStream.Read(plainTextBytes, 0, plainTextBytes.Length); memoryStream.Close(); cryptoStream.Close(); return Encoding.UTF8.GetString(plainTextBytes, 0, decryptedByteCount); }
Implementación con Archivos
////// Encriptar un Archivo /// /// Mensajea Cifrar /// Nombre del archivo /// Valor de la llave /// Vector de Inicio public static void encryptToFile(String plainMessage,String filename, byte[] Key, byte[] IV) { FileStream fileStream = File.Open(filename, FileMode.OpenOrCreate); Rijndael RijndaelAlg = Rijndael.Create(); CryptoStream cryptoStream = new CryptoStream(fileStream, RijndaelAlg.CreateEncryptor(Key, IV), CryptoStreamMode.Write); StreamWriter streamWriter = new StreamWriter(cryptoStream); streamWriter.WriteLine(plainMessage); streamWriter.Close(); cryptoStream.Close(); fileStream.Close(); } ////// /// /// Nombre del archivo cifrado /// Valor de la llave /// Vector de Inicio ///Mensaje Encriptado public static string decryptFromFile(String filename, byte[] Key, byte[] IV) { FileStream fileStream = File.Open(filename, FileMode.OpenOrCreate); Rijndael RijndaelAlg = Rijndael.Create(); CryptoStream cryptoStream = new CryptoStream(fileStream, RijndaelAlg.CreateDecryptor(Key, IV), CryptoStreamMode.Read); StreamReader streamReader = new StreamReader(cryptoStream); string plainMessage = streamReader.ReadLine(); streamReader.Close(); cryptoStream.Close(); fileStream.Close(); return plainMessage; }
viernes, 22 de mayo de 2015
Agregar local Storage a XenServer 6.2 después de la Instalacion
El primer Paso es abril la consola de comandos de nuestro servidor ya sea desde el XenCenter o desde el servidor mismo
# fdisk -l
En mi caso el comando queda asi:
# xe sr-create content-type=user device-config:device=/dev/disk/by-id/scsi-SATA_WDC_WD2003FYPS-_WD-WCAVY5331769 host-uuid=4bed2dba-d650-452c-aaad-81d556e3fea4 name-label=”Local Storage 2” shared=false type=lvm
Opcion 2
Cramos la entrada en el sistema con el siguiente comando#pvcreate /dev/sdb



