Mostrando las entradas con la etiqueta codigo. Mostrar todas las entradas
Mostrando las entradas con la etiqueta codigo. Mostrar todas las entradas

jueves, agosto 02, 2007

Numero a Letras en SQL




Mas de alguna vez hemos tenido la necesidad de pasar de numeros a letras, y hay una gran cantidad de rutinas muy eficientes para hacerlo, tanto para delphi, .NET, etc. Aquí una no tan común en SQL. Cortesía de Hugo.




CREATE FUNCTION [dbo].[Num2Let]
(
@Numero NUMERIC(20,2)
)
RETURNS varchar(2000)
AS
BEGIN
DECLARE @lnEntero INT,
@lcRetorno VARCHAR(512),
@lnTerna INT,
@lcMiles VARCHAR(512),
@lcCadena VARCHAR(512),
@lnUnidades INT,
@lnDecenas INT,
@lnCentenas INT,
@lnFraccion INT
SELECT @lnEntero = CAST(@Numero AS INT),
@lnFraccion = (@Numero - @lnEntero) * 100,
@lcRetorno = '',
@lnTerna = 1
WHILE @lnEntero > 0
BEGIN
SELECT @lcCadena = ''
SELECT @lnUnidades = @lnEntero % 10
SELECT @lnEntero = CAST(@lnEntero/10 AS INT)
SELECT @lnDecenas = @lnEntero % 10
SELECT @lnEntero = CAST(@lnEntero/10 AS INT)
SELECT @lnCentenas = @lnEntero % 10
SELECT @lnEntero = CAST(@lnEntero/10 AS INT)
-- Unidades
SELECT @lcCadena =
CASE
WHEN @lnUnidades = 1 AND @lnTerna = 1 THEN 'Uno ' + @lcCadena
WHEN @lnUnidades = 1 AND @lnTerna <> 1 THEN 'Un ' + @lcCadena
WHEN @lnUnidades = 2 THEN 'Dos ' + @lcCadena
WHEN @lnUnidades = 3 THEN 'Tres ' + @lcCadena
WHEN @lnUnidades = 4 THEN 'Cuatro ' + @lcCadena
WHEN @lnUnidades = 5 THEN 'Cinco ' + @lcCadena
WHEN @lnUnidades = 6 THEN 'Seis ' + @lcCadena
WHEN @lnUnidades = 7 THEN 'Siete ' + @lcCadena
WHEN @lnUnidades = 8 THEN 'Ocho ' + @lcCadena
WHEN @lnUnidades = 9 THEN 'Nueve ' + @lcCadena
ELSE @lcCadena
END
-- decenas
SELECT @lcCadena =
CASE
WHEN @lnDecenas = 1 THEN
CASE @lnUnidades
WHEN 0 THEN 'Diez '
WHEN 1 THEN 'Once '
WHEN 2 THEN 'Doce '
WHEN 3 THEN 'Trece '
WHEN 4 THEN 'Catorce '
WHEN 5 THEN 'Quince '
ELSE 'Dieci' + @lcCadena
END
WHEN @lnDecenas = 2 AND @lnUnidades = 0 THEN 'Veinte ' + @lcCadena
WHEN @lnDecenas = 2 AND @lnUnidades <> 0 THEN 'Veinti' + @lcCadena
WHEN @lnDecenas = 3 AND @lnUnidades = 0 THEN 'Treinta ' + @lcCadena
WHEN @lnDecenas = 3 AND @lnUnidades <> 0 THEN 'Treinta y ' + @lcCadena
WHEN @lnDecenas = 4 AND @lnUnidades = 0 THEN 'Cuarenta ' + @lcCadena
WHEN @lnDecenas = 4 AND @lnUnidades <> 0 THEN 'Cuarenta y ' + @lcCadena
WHEN @lnDecenas = 5 AND @lnUnidades = 0 THEN 'Cincuenta ' + @lcCadena
WHEN @lnDecenas = 5 AND @lnUnidades <> 0 THEN 'Cincuenta y ' + @lcCadena
WHEN @lnDecenas = 6 AND @lnUnidades = 0 THEN 'Sesenta ' + @lcCadena
WHEN @lnDecenas = 6 AND @lnUnidades <> 0 THEN 'Sesenta y ' + @lcCadena
WHEN @lnDecenas = 7 AND @lnUnidades = 0 THEN 'Setenta ' + @lcCadena
WHEN @lnDecenas = 7 AND @lnUnidades <> 0 THEN 'Setenta Y ' + @lcCadena
WHEN @lnDecenas = 8 AND @lnUnidades = 0 THEN 'Ochenta ' + @lcCadena
WHEN @lnDecenas = 8 AND @lnUnidades <> 0 THEN 'Ochenta y ' + @lcCadena
WHEN @lnDecenas = 9 AND @lnUnidades = 0 THEN 'Noventa ' + @lcCadena
WHEN @lnDecenas = 9 AND @lnUnidades <> 0 THEN 'Noventa y ' + @lcCadena
ELSE @lcCadena
END
-- centenas
SELECT @lcCadena =
CASE
WHEN @lnCentenas = 1 AND @lnUnidades = 0 AND @lnDecenas = 0 THEN 'Cien ' + @lcCadena
WHEN @lnCentenas = 1 AND NOT(@lnUnidades = 0 AND @lnDecenas = 0) THEN 'Ciento ' + @lcCadena
WHEN @lnCentenas = 2 THEN 'Doscientos ' + @lcCadena
WHEN @lnCentenas = 3 THEN 'Trescientos ' + @lcCadena
WHEN @lnCentenas = 4 THEN 'Cuatrocientos ' + @lcCadena
WHEN @lnCentenas = 5 THEN 'Quinientos ' + @lcCadena
WHEN @lnCentenas = 6 THEN 'Seiscientos ' + @lcCadena
WHEN @lnCentenas = 7 THEN 'Setecientos ' + @lcCadena
WHEN @lnCentenas = 8 THEN 'Ochocientos ' + @lcCadena
WHEN @lnCentenas = 9 THEN 'Novecientos ' + @lcCadena
ELSE @lcCadena
END
--Terna
SELECT @lcCadena =
CASE
WHEN @lnTerna = 1 THEN @lcCadena
WHEN @lnTerna = 2 AND (@lnUnidades + @lnDecenas + @lnCentenas <> 0) THEN @lcCadena + ' Mil '
WHEN @lnTerna = 3 AND (@lnUnidades + @lnDecenas + @lnCentenas <> 0) AND
@lnUnidades = 1 AND @lnDecenas = 0 AND @lnCentenas = 0 THEN @lcCadena + ' Millon '
WHEN @lnTerna = 3 AND (@lnUnidades + @lnDecenas + @lnCentenas <> 0) AND
NOT (@lnUnidades = 1 AND @lnDecenas = 0 AND @lnCentenas = 0) THEN @lcCadena + ' Millones '
WHEN @lnTerna = 4 AND (@lnUnidades + @lnDecenas + @lnCentenas <> 0) THEN @lcCadena + ' Mil Millones '
ELSE ''
END
--Armo el retorno terna a terna
SELECT @lcRetorno = @lcCadena + @lcRetorno
SELECT @lnTerna = @lnTerna + 1
END
IF @lnTerna = 1
SELECT @lcRetorno = 'Cero'
RETURN RTRIM(@lcRetorno) + ' Con ' + LTRIM(STR(@lnFraccion,2)) + '/100'
END

lunes, junio 25, 2007

Cómo enviar correo electrónico por código usando cuentas de GMail

Enviar correos utilizando .NET es muy fácil sin embargo para utilizar la cuenta de Gmail se necesita un par de configuraciones adicionales como lo son el uso de SSL y un puerto diferente para la conexión

articulo original aqui

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

public class EjemploCorreoGMail
{
    public static void Main()
    {
            System.Net.Mail.MailMessage msg = new System.Net.Mail.MailMessage();
            msg.To.Add("destinatario@dominio.com");
            msg.From = new MailAddress("micuenta@gmail.com", "Tu Nombre", System.Text.Encoding.UTF8);
            msg.Subject = "Prueba de correo a GMail";
            msg.SubjectEncoding = System.Text.Encoding.UTF8;
            msg.Body = "Cuerpo del mensaje";
            msg.BodyEncoding = System.Text.Encoding.UTF8;
            msg.IsBodyHtml = false; 

            //Aquí es donde se hace lo especial
            SmtpClient client = new SmtpClient();
            client.Credentials = new System.Net.NetworkCredential("micuenta@gmail.com", "miclave");
            client.Port = 587;
            client.Host = "smtp.gmail.com";
            client.EnableSsl = true; //Esto es para que vaya a través de SSL que es obligatorio con GMail
            try
            {
                        client.Send(msg);
            }
            catch (System.Net.Mail.SmtpException ex)
            {
                        Console.WriteLine(ex.Message);
                        Console.ReadLine();
            }
    }
}

martes, junio 19, 2007

Buscador de codigo fuente



Existe un buscador de codigo llamado Krugle, permite buscar codigo fuente en una gran cantidad de lenguajes y temas de programacion y tiene incluso plug-ins.

fuente original aqui

viernes, mayo 18, 2007

Como obtener la informacion del Disco Duro

Muchas veces nos es útil obtener información del Disco Duro por ejemplo para el control de licencias, una vez obtenido ésto podemos encriptar o manipular esa información para que nos sirva de comprobación de piratería :)

articulo original aqui

Se hace una Clase DiscoDuro.vb que será nuestra clase especializada

Public Class DiscoDuro
Private _Modelo As String
Private _Tipo As String

Private _Serial As String

'Propiedad para Manejar el Modelo del Disco
Public Property Modelo() As String

Get
'Retorna el Modelo del Diso Duro
Return _Modelo
End Get
Set(ByVal value As String)
'Asigna el Modelo del Disco Duro

_Modelo = value
End Set
End Property

'Propiedad para Manejar el Tipo del Disco

Public Property Tipo() As String
Get
'Retorna el Tipo del Diso Duro
Return _Tipo
End Get

Set(ByVal value As String)
'Asigna el Tipo del Disco Duro
_Tipo = value

End Set
End Property

'Propiedad para Manejar el Serial del Disco
Public Property Serial() As String

Get
'Retorna el Serial del Diso Duro
Return _Serial
End Get
Set(ByVal value As String)
'Asigna el Serial del Disco Duro

_Serial = value
End Set
End Property

End Class

Y el codigo para utilizarla seria asi

'Importamos el namespace System.Management para Accesar al Windows Management Instrumentation
Imports System.Management

Public Class Form1
'Declaramos una coleccion del tipo ArrayList
Dim hdLista As New ArrayList

'En el evento Load escribiremos el codigo para obtener la informacion

Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load
'Creamos ahora un objeto ManagementObjectSearcher y agregaremos la cadena de seleccion

'para obtener de la clase Win32_DiskDrive
' la Informacion del modelo y el tipo del Disco Duro
Dim BuscardorWMI As New ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive")

For Each wmi_HD As ManagementObject In BuscardorWMI.Get

'creamos un objeto del tipo DiscoDuro
Dim Hd As New DiscoDuro
'asignamos el valor del Modelo obtenido de la consulta
' en la propiedad Modelo del objeto Hd
Hd.Modelo = wmi_HD("Model").ToString
'asignamos el valor del Tipo obtenido de la consulta

' en la propiedad Modelo del objeto Hd
Hd.Tipo = wmi_HD("InterfaceType").ToString
'y Finalmente agregamos dicho objeto Hd al ArrayList que creamos
hdLista.Add(Hd)
Next


'Creamos ahora una nueva instancia del objeto que habiamos
' creado del tipo ManagementObjectSearcher
'y agregaremos la cadena de seleccion para obtener de la clase Win32_PhysicalMedia
' los seriales internos
'de los Discos Duros que hallamos encontrado en el ciclo anterior
BuscardorWMI = New ManagementObjectSearcher("SELECT * FROM Win32_PhysicalMedia")
'Deifinimos a i como un contador para manejar el ArrayList

Dim i As Integer = 0

For Each wmi_HD As ManagementObject In BuscardorWMI.Get

'Indica continuar con el ciclo mientras que i sea menor que
' la cantidad de discos encontrados
If i < hdLista.Count - 1 Then
'creamos un nuevo objeto del Tipo DiscoDuro para ir almacenando alli
'cada uno de los discos duros encontrados

Dim hd As New DiscoDuro
'asignamos el valor acutalde la lista en el objeto HD
hd = hdLista(i)
'debemos verificar que el valor del campo "SerialNumber" obtenido en la busqueda
'no sea un valor nulo de lo contrario

'la aplicacion arrojará una excepcion
If wmi_HD("SerialNumber").ToString = Nothing Then
'en el caso de que se halla encontrado el serial la propiedad "Serial" del
' objeto hd se guardará los siguiente:

hd.Serial = "No se Pudo Obtener El Serial"
Else
'en el caso contrario almacenaremos el numero de serial interno
'del disco duro en la propiedad "Serial" del objeto hd
hd.Serial = wmi_HD("SerialNumber").ToString
End If

'incrementando i
i += 1
End If
Next

'aqui coloco una manera de mostrarlo ustedes pueden escoger la que mejor les paresca
For Each hd As DiscoDuro In hdLista
'por cuestiones de tiempo yo escogí usar un MessageBox

MessageBox.Show(hd.Modelo & vbCrLf & hd.Tipo & vbCrLf & hd.Serial)
Next

End Sub

End Class