Buscar

miércoles, 2 de diciembre de 2009

Comprimir archivos en .NET (Zip o UnZip)

Muchas veces he necesitado comprimir archivos desde mi aplicación, y lo hacia con una clase que hace tiempo encontré en la red, hoy buscando un componente me encuentro con esta pagina que ofrece un componente para comprimir y descomprimir archivos, tiene varios ejemplos en diferentes lenguajes y la verdad lo veo muy completo y muy fácil de usar y fuera de eso es gratis (Ms-PL)

Link:
DotNetZip Library

lunes, 30 de noviembre de 2009

Eval en C#

Cuando trabajaba con vb había una función llamada Eval, que a mi parecer era muy útil; cuando empecé a trabajar con c# note que esta función no existía en este lenguaje, entonces me puse a la tarea de buscar algo parecido en c# y esto fue lo que encontré, en este link
http://weblogs.asp.net/datagridgirl/archive/2004/04/19/115900.aspx


public static string Eval(string Text)
{
//http://weblogs.asp.net/datagridgirl/archive/2004/04/19/115900.aspx Microsoft.JScript.Vsa.VsaEngine myEngine = Microsoft.JScript.Vsa.VsaEngine.CreateEngine();
return Microsoft.JScript.Eval.JScriptEvaluate(Text, myEngine).ToString(); ;
}


Lo que hace la funcion es recibir un string y lo evalua devoliendo el resultado ejemplo Eval(“56+60”) devuleve 116
Espacio de nombres

Microsoft.JScript.Vsa.VsaEngine

Espero les sea de utilidad

martes, 30 de junio de 2009

Ocultar un Tab (TabPage) en C#

Hace un tiempo me pusieron la tarea de ocultar una pestaña de un tab (un TabPage) cuando deschequiaran o mostrarlo cuando chequiaran un chekBox; entonces fue cuando me di cuenta que la propiedad Hide no sirve para nada. Y me puse a buscar como hacer esto, di con la pagina de Microsoft donde en la parte de comentarios dice “el método Hide de TabPage no ocultará la ficha. Para ocultar la ficha, debe quitar el control TabPage de la colección TabControl.TabPages”.
Asi que está es la forma como se oculta un Tab de un control Tab en C#:

if(chkimpresion.Cheked)
{
tabControl1.TabPages.Add(Impresion);//Impresión es el nombre que le dí al tab cuando lo cree. Y aquí lo muestro.
}
else
{
tabControl1.TabPages.Remove(Impresion);//Aquí se oculta.
}

Link
http://msdn.microsoft.com/es-es/library/system.windows.forms.tabpage(VS.80).aspx

Espero les sirva.

lunes, 8 de junio de 2009

Saber que usuario ingresa, borra o actualiza registros en sql (Auditoria en Sql SUSER_SNAME())

Muchas veces necesitamos saber el nombre de inicio de sesión de la persona que esta ejecutando una consulta de insert, update o delete en SQL, ya sea para hacer auditorias o para validar accesos a nuestras aplicaciones para obtener este inicio de sesión simplemente utilizamos el comando SUSER_SNAME(), un ejemplo de su uso es cuando queremos hacer tablas de auditoria, ósea saber quien ingresa, borra, o actualiza registros en una tabla especifica.
Yo lo hago con un trigger de la siguiente manera:

CREATE TRIGGER [NombreTrigger]
ON Tabla
after insert
AS
Insert Into TablaAuditoria(Campo1,Campo2,Campo3,Usuario,Fecha)
Select Campo1,Campo2,Campo3, SUSER_SNAME(),getdate()
From Tabla

Con este trigger logro tener un registro de quien ingreso un registro a mi tabla y a que horas
Espero les sea útil

viernes, 22 de mayo de 2009

Recibir o leer correos por c# .net mediante pop3

Este resumen no está disponible. Haz clic en este enlace para ver la entrada.

martes, 12 de mayo de 2009

Imprimir en la impresora por defecto un reporte de Crystal Report en C#

Este código busca la impresora por defecto del equipo, y se la asigna a un reporte, para imprimirlo, sin necesidad de mostrar el reporte, ni de mostrar el cuadro de dialogo de impresión.

public void Imprimir()
{
string NombreImpresora = "";//Donde guardare el nombre de la impresora por defecto

//Busco la impresora por defecto
for (int i = 0; i < PrinterSettings.InstalledPrinters.Count; i++)
{
PrinterSettings a = new PrinterSettings();
a.PrinterName = PrinterSettings.InstalledPrinters[i].ToString();
if (a.IsDefaultPrinter)
{
NombreImpresora = PrinterSettings.InstalledPrinters[i].ToString();

}
}


rptReporte rpt = new rptReporte ();// Instancio el reporte


rpt.SetDataSource(Dt);//Asigno la fuente de datos a mi reporte.
rpt.PrintOptions.PrinterName =NombreImpresora; );//Asigno la impresora
rpt.PrintToPrinter(2, false, 0, 0); );//Imprimo 2 copias
}


Si necesitamos imprimir el reporte en una impresora especifica, simplemente asignamos el nombre de la impresora al reporte

rpt.PrintOptions.PrinterName =”ElNombreImpresora”;


Nombre de espacios utilizados

using System.Drawing.Printing;

lunes, 4 de mayo de 2009

Enviar email c# (outlook), con archivo adjunto

Esta funcion envia un correo desde c#, y adjunta un archivo, lo he probado con gmail y desde un servidor de correo empresarial, espero les sirva.

librerias


using System.Net;
using System.Net.Mail;
using System.Net.Mime;



class clsMail
{


public static bool Enviar()
{
//Ruta de archivo adjunto (Si lo lleva)
string PathFile = @"Z:\archivo.rar";

//Creo el mensaje del mail.
System.Net.Mail.MailMessage msg = new System.Net.Mail.MailMessage();

//Agrego los destinatarios, pueden ir varios
msg.To.Add("Paraquienvaelcorreo@empresa.com.co");

//Agrego la direccion del que manda el email, puede ser falsa o verdadera, pero si es falsa puede que el servidor de correo lo detecte como spam, tambien depende de las credenciales que se ponen mas abajo
msg.From = new MailAddress("jaas.jaas@gmail.com", "Jaas", System.Text.Encoding.UTF8);

//Pongo el asunto
msg.Subject = "Asunto" ;

//El tipo de codificacion del Asunto
msg.SubjectEncoding = System.Text.Encoding.UTF8;

//Escribo el mensaje Y su codificacion
msg.Body = "Mensaje del correo";
msg.BodyEncoding = System.Text.Encoding.UTF8;

//Especifico si va ha ser interpertado con HTML
msg.IsBodyHtml = false;

//Agrego el archivo que puse en la ruta anterior "PathFile", y su tipo.
Attachment Data = new Attachment(PathFile, MediaTypeNames.Application.Zip );

//Obtengo las propiedades del archivo.
ContentDisposition disposition = Data.ContentDisposition;
disposition.CreationDate = System.IO.File.GetCreationTime(PathFile);
disposition.ModificationDate = System.IO.File.GetLastWriteTime(PathFile);
disposition.ReadDate = System.IO.File.GetLastAccessTime(PathFile);
//Agrego el archivo al mensaje
msg.Attachments.Add(Data);

//Creo un objeto de tipo cliente de correo (Por donde se enviara el correo)
SmtpClient client = new SmtpClient();

//Si no voy a usar credenciales pongo false, Pero la mayoria de servidores exigen las credenciales para evitar el spam
//client.UseDefaultCredentials = false;

//Como voy a utilizar credenciales las pongo
client.Credentials = new System.Net.NetworkCredential("jaas.jaas@gmail.com", "Password");
//Si fuera gmail seria 587 el puerto, si es un servidor outlook casi siempre el puerto 25, yo utilizo un servidor propio de correo
//client.Port = 587;
client.Port = 25;

//identifico el cliente que voy a utilizar
client.Host = "Miservidor.com.co";

//Si fuera a utilizar gmail esto deberia ir en true, esto es un certificado de seguridad
//client.EnableSsl = true;
client.EnableSsl = false;


try
{
//Envio el mensaje
client.Send(msg);
return true;
}
catch (System.Net.Mail.SmtpException ex)
{
return false;
}
}

}

miércoles, 22 de abril de 2009

Guardar fecha sin hora SQL

Muchas veces necesitamos guardar la fecha sin hora en una base de sql, el problema surge cuando utilizamos la función
 GETDATE () 
que nos devuelve la fecha y la hora o cuando nuestra aplicación envía la fecha con la hora, una forma de corregir esto es utilizar la función
 CONVERT 
de esta forma

set dateformat dmy;
select CONVERT (datetime,CONVERT(VARCHAR,GETDATE(),101),101)

Esto lo que hace es convertir la fecha a un texto con un formato sin hora y después vuelvo y lo convierto a un dato de tipo fecha por si necesito realizar operaciones con este dato.

martes, 21 de abril de 2009

Crear una sola instancia de un formulario en c#

Crear una sola instancia de un formulario en c#

Este código me lo encontré en una página, no me acuerdo cual, y me ha sido muy útil, su función es permitir solo una instancia del formulario abierta. Entonces si ya tenemos abierto un formulario, y lo volvemos a tratar de abrir, el mostrara el primer formulario abierto, en ves de crear una nueva instancia.

Uso:
Este código se debe copiar en cada formulario, que se desee dotar de esta funcionalidad
Y se reemplaza
Formulario
por el nombre de la clase del formulario.
private static Formulario m_FormDefInstance;
/// 
/// Crea una instancia unica del Formulario
/// 
/// Instancia por defecto
public static Formulario DefInstance
{
get
{
if (m_FormDefInstance == null  || m_FormDefInstance.IsDisposed)
m_FormDefInstance = new Formulario ();
return m_FormDefInstance;
}
set
{
m_FormDefInstance = value;
}
}

Para abrir el formulario se utiliza:

Formulario.DefInstance.Show();

lunes, 20 de abril de 2009

Redondeo por múltiplos(Excel, Sql)

En Excel existe una función para redondear por múltiplos, la función es MROUND(N;m), donde redondea n a el múltiplo de m mas cercano. Eso si tenemos el Análisis Toolpack., si no se puede utilizar la siguiente función
REDONDEAR(N/m;0)*m.
Ejemplo :
MROUND(5,3)
Resultado:
6

Esto es una función que hace lo mismo pero en SQL:
Uso:

select dbo.RoundMult(5,3)


CREATE FUNCTION [dbo].[RoundMult] (@Valor numeric(18,2),@Multiplo Numeric(18,2))
RETURNS nvarchar(50)
WITH EXECUTE AS CALLER
AS
BEGIN

declare @Residuo numeric(18,0)
DECLARE @ValASumar numeric(18,0)

set @Residuo=@Valor%@Multiplo

IF @Residuo=0
BEGIN
return @Valor
END
ELSE
set @ValASumar= @Multiplo-@Residuo
return @Valor+@ValASumar
END

Formatear texto SQL (Poner letra inicial en mayuscula)

Esta función sql muestra como poner la primera letra de cada palabra en mayúscula de un registro de nuestra base de datos, es muy útil, cuando los usuarios, ingresan los datos de manera desorganizada.

Uso:
Select [dbo].InitCap('TEXTO A FORMATEAR')
Resultado:
Texto A Formatear


CREATE FUNCTION [dbo].[InitCap] ( @InputString nvarchar(255) )
RETURNS NVARCHAR(255)
AS
BEGIN
DECLARE @Index INT
DECLARE @Char CHAR(1)
DECLARE @PrevChar CHAR(1)
DECLARE @OutputString NVARCHAR(255)
SET @OutputString = LOWER(@InputString)
SET @Index = 1
WHILE @Index <= LEN(@InputString) BEGIN SET @Char = SUBSTRING(@InputString, @Index, 1) SET @PrevChar = CASE WHEN @Index = 1 THEN ' ' ELSE SUBSTRING(@InputString, @Index - 1, 1) END IF @PrevChar IN (' ', ';', ':', '!', '?', ',', '.', '_', '-', '/', '&', '''', '(') BEGIN IF @PrevChar != '''' OR UPPER(@Char) != 'S' SET @OutputString = STUFF(@OutputString, @Index, 1, UPPER(@Char)) END SET @Index = @Index + 1 END RETURN @OutputString END

viernes, 17 de abril de 2009

Insertar imágenes dinámicamente en Cristal Report con C# 2005

Insertar imágenes dinámicamente en Cristal Report
Muchas veces tenemos que insertar imágenes ennuestros reportes dependiendo el registro que estemos mostrando, una forma queme a funcionado muy bien es la siguiente.
Cuando diseñemos el reporte debemos insertar un campo de tipo System.Byte[] en el DataTable utilizadopara el diseño de nuestro reporte, en este campo meteremos la imagen entiempo de ejecución.


Este campo se inserta en el reporte y será dondemostraremos la imagen.



Para mostrar el reporte utilizamos lo siguiente, para llenarel campo creado.

public void CargarReporte()
{
DataTable Dt = new
DataTable();//Creo un DataTable que sera la fuente de datos de mi reporte.
Dt=clsOrdenTerceros.Get_InfoParaOrdenImpresa(NumOrden);//Lleno el DataTable

rptOrdenSalidaTercero rpt = new rptOrdenSalidaTercero();// instancio el reporte

Dt.Columns.Add("Ruta11",System.Type.GetType("System.Byte[]"));//Agrego la columna con el tipo de dato "System.Byte[]",donde guardare mi imagen.

Dt.Rows[0]["Ruta11"] = CargarImagen("C:\foto.jpg"));//Cargo La imagen

rpt.SetDataSource(Dt);//Asigno la fuente de datos a mi reporte.
}

Y esta es la función que carga la imagen.


public static Byte[]CargarImagen(string rutaArchivo)
{


if (rutaArchivo != "")
{

try
{

FileStream Archivo = new FileStream(rutaArchivo, FileMode.Open);//Creo el archivo
BinaryReader binRead = new BinaryReader(Archivo);//Cargo el Archivo en modo binario

Byte[] imagenEnBytes = new Byte[(Int64)Archivo.Length]; //Creo un Array de Bytes donde guardare la imagen

binRead.Read(imagenEnBytes,0, (int)Archivo.Length);//Cargo la imagen en el array de Bytes
binRead.Close();

Archivo.Close();

return imagenEnBytes;//Devuelvo la imagen convertida en un array de bytes

}


catch
{
return new Byte[0];
}

}

return new byte[0];

}



Espacio de nombre Usados


using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
using System.Runtime.Serialization;

lunes, 5 de enero de 2009

Eventos en Graficas (Chart) del producto DotNetCharting

Eventos en Graficas (Chart) del producto DotNetCharting

Este código permite capturar eventos como el onMouse y el clic en los chart creados
con donetcharting, para poder interactuar con las graficas creadas.


private void chart1_MouseMove(object sender, MouseEventArgs e)
{

HitTestInfo hit = this.chart1.HitTest(); // Aqui se optiene el ultimo evento ejecutado en el chart

if (hit.Object is Element) //Miro si es un elemento (Una sección de la barra en el chart)
{
Element el = (Element)hit.Object; //Creo un elemento para poder acceder a las propiedades de ese elemento y poder tomar decisiones

int pos1 = 0;

//Acceso a las propiedades del elemento seccionado para tomar dediciones
pos1 = el.ToolTip.IndexOf("Orden Produccion");
string Cod = el.ToolTip.Substring(8, pos1 - 9);

Codigo del evento……
}
}


El evento principal de este codigo es HitTestInfo hit = this.chart1.HitTest();

Que es donde se registra todos los eventos en todas las partes del chart (Solo queda
el ultimo evento); Este se puede utilizar en cualquier evento del Chart

Espacios Utilizados

using dotnetCHARTING.WinForms;