sábado, 15 de diciembre de 2012

Validación con expresiones regulares en C#.NET

Las expresiones regulares son modelos que describen las combinaciones de caracteres en el texto. Se podrían definir como una serie de carácteres que forman un patrón, que representan a otro grupo de carácteres mayor, de tal forma que podemos comparar el patrón con otros conjuntos de carácteres para ver las coincidencias. Las expresiones regulares pueden utilizarse en múltiples lenguajes de programación pero en esta entrada vamos a ver un ejemplo de validación de formularios mediante Javascript y haciendo uso de expresiones regulares.
Un buen tutorial para iniciarse en el manejo de expresiones regulares lo podemos encontrar en Desarrolloweb. Para realizar el ejemplo siguiente no hay porque conocer en profundidad su manejo. A continuación muestro una serie de tablas a modo de chuleta para que podamos utilizarlas con un simple corta y pega.
La tabla siguiente contiene los caracteres especiales de las expresiones regulares.
Carácter Texto buscado
^ Principio de entrada o línea.
$ Fin de entrada o línea.
* El carácter anterior 0 o más veces.
+ El carácter anterior 1 o más veces.
? El carácter anterior una vez como máximo (es decir, indica que el carácter anterior es opcional).
. Cualquier carácter individual, salvo el de salto de línea.
x|y x o y.
{n} Exactamente n apariciones del carácter anterior.
{n,m} Como mínimo n y como máximo m apariciones del carácter anterior.
[abc] Cualquiera de los caracteres entre corchetes. Especifique un rango de caracteres con un guión (por ejemplo, [a-f] es equivalente a [abcdef]).
[^abc] Cualquier carácter que no esté entre corchetes. Especifique un rango de caracteres con un guión (por ejemplo, [^a-f] es equivalente a [^abcdef]).
\b Límite de palabra (como un espacio o un retorno de carro).
\B Cualquiera que no sea un límite de palabra.
\d Cualquier carácter de dígito. Equivalente a [0-9].
\D Cualquier carácter que no sea de dígito. Equivalente a [^0-9].
\f Salto de página.
\n Salto de línea.
\r Retorno de carro.
\s Cualquier carácter individual de espacio en blanco (espacios, tabulaciones, saltos de página o saltos de línea).
\S Cualquier carácter individual que no sea un espacio en blanco.
\t Tabulación.
\w Cualquier carácter alfanumérico, incluido el de subrayado. Equivalente a [A-Za-z0-9_].
\W Cualquier carácter que no sea alfanumérico. Equivalente a [^A-Za-z0-9_].
La tabla siguiente contiene algunos de los patrones más utilizados a la hora de validar formularios. Si alguien conoce alguna expresión regular más -que pueda ser útil en la validación de formularios- la puede poner en los comentarios y yo la incorporaré a esta tabla.
Cualquier letra en minuscula [a-z]
Entero ^(?:\+|-)?\d+$
Correo electrónico /[\w-\.]{3,}@([\w-]{2,}\.)*([\w-]{2,}\.)[\w-]{2,4}/
URL ^(ht|f)tp(s?)\:\/\/[0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*(:(0-9)*)*(\/?)( [a-zA-Z0-9\-\.\?\,\'\/\\\+&%\$#_]*)?$
Contraseña segura (?!^[0-9]*$)(?!^[a-zA-Z]*$)^([a-zA-Z0-9]{8,10})$(Entre 8 y 10 caracteres, por lo menos un digito y un alfanumérico, y no puede contener caracteres espaciales)
Fecha ^\d{1,2}\/\d{1,2}\/\d{2,4}$(Por ejemplo 01/01/2007)
Hora ^(0[1-9]|1\d|2[0-3]):([0-5]\d):([0-5]\d)$(Por ejemplo 10:45:23)
Número tarjeta de crédito ^((67\d{2})|(4\d{3})|(5[1-5]\d{2})|(6011))(-?\s?\d{4}){3}|(3[4,7])\ d{2}-?\s?\d{6}-?\s?\d{5}$
Número teléfono ^[0-9]{2,3}-? ?[0-9]{6,7}$
Código postal ^([1-9]{2}|[0-9][1-9]|[1-9][0-9])[0-9]{3}$
Certificado Identificación Fiscal ^(X(-|\.)?0?\d{7}(-|\.)?[A-Z]|[A-Z](-|\.)?\d{7}(-|\.)? [0-9A-Z]|\d{8}(-|\.)?[A-Z])$
Valida sólo números del 1 al 12 (ideal para meses) ^([0-1]?[0-2]|[0-9])$
Valida de 0.1 a 9.9 ^([0-9].[1-9])$
Valida desde 10.01 hasta 99.99 con 2 decimales máximo ^[0-9][0-9](.[0-9][0-9])$
Valida desde 0.01 hasta 99.99 con sólo 2 decimales máximo ^[0-9]?[0-9](.[0-9][0-9])$
Aquí les dejo el código:
private void txtcodigo_KeyUp(object sender, KeyEventArgs e)
        {
            if (es_numero(txtcodigo))
            {
                errorProvider1.SetError(txtcodigo, String.Empty);
                txtcodigo.BackColor = Color.Honeydew;
            }
            else
            {
                errorProvider1.SetError(txtcodigo, "Solo numeros");
                txtcodigo.BackColor = Color.MistyRose;
            }
        }

        private void txtemail_KeyUp(object sender, KeyEventArgs e)
        {
            if (es_email(txtemail))
            {
                errorProvider1.SetError(txtemail, String.Empty);
                txtemail.BackColor = Color.Honeydew;
            }
            else
            {
                errorProvider1.SetError(txtemail, "ejemplo@ejemplo.com");
                txtemail.BackColor = Color.MistyRose;
            }
        }


        private void txtnombre_KeyUp(object sender, KeyEventArgs e)
        {
            if (es_cadena(txtnombre))
            {
                errorProvider1.SetError(txtnombre, String.Empty);
                txtnombre.BackColor = Color.Honeydew;
            }
            else
            {
                errorProvider1.SetError(txtnombre, "Solo letras");
                txtnombre.BackColor = Color.MistyRose;
            }
        }

        private void txttelf_KeyUp(object sender, KeyEventArgs e)
        {
            if (es_telefono(txttelf))
            {
                errorProvider1.SetError(txttelf, String.Empty);
                txttelf.BackColor = Color.Honeydew;
            }
            else
            {
                errorProvider1.SetError(txttelf, "Formato: 999-9999");
                txttelf.BackColor = Color.MistyRose;
            }
        }

        private void txtweb_KeyUp(object sender, KeyEventArgs e)
        {
            if (es_url(txtweb))
            {
                errorProvider1.SetError(txtweb, String.Empty);
                txtweb.BackColor = Color.Honeydew;
            }
            else
            {
                errorProvider1.SetError(txtweb, "www.example.com");
                txtweb.BackColor = Color.MistyRose;
            }
        }

        private void txtsueldo_KeyUp(object sender, KeyEventArgs e)
        {
            if (es_decimal(txtsueldo))
            {
                errorProvider1.SetError(txtsueldo, String.Empty);
                txtsueldo.BackColor = Color.Honeydew;
            }
            else
            {
                errorProvider1.SetError(txtsueldo, "Formato: 00,00");
                txtsueldo.BackColor = Color.MistyRose;
            }
        }

        private static bool es_numero(Control mitextbox)
        {

            Regex regex = new Regex(@"^[0-9]+$");
            return regex.IsMatch(mitextbox.Text);

        }

        private static bool es_cadena(Control mitextbox)
        {

            Regex regex = new Regex(@"^[^ ][a-zA-Z ]+[^ ]$");
            return regex.IsMatch(mitextbox.Text);

        }

        private static bool es_telefono(Control mitextbox)
        {

            Regex regex = new Regex(@"^([0-9]{3})[-. ]?([0-9]{4})$");
            return regex.IsMatch(mitextbox.Text);
            
        }

        private static bool es_decimal(Control mitextbox)
        {

            Regex regex = new Regex(@"^[0-9]{1,9}([\.\,][0-9]{1,3})?$");
            return regex.IsMatch(mitextbox.Text);
            
        }

        private static bool es_url(Control mitextbox)
        {

            Regex regex = new Regex(@"^[a-zA-Z0-9\-\.]+\.(com|org|net|mil|edu|COM|ORG|NET|MIL|EDU)$");
            return regex.IsMatch(mitextbox.Text);
        }

        private static bool es_email(Control mitextbox)
        {
            
            Regex regex = new Regex(@"^(?("")(""[^""]+?""@)|(([0-9a-z]((\.(?!\.))|[-!#\$%&'\*\+/=\?\^`\{\}\|~\w])*)(?<=[0-9a-z])@))" +
                @"(?(\[)(\[(\d{1,3}\.){3}\d{1,3}\])|(([0-9a-z][-\w]*[0-9a-z]*\.)+[a-z0-9]{2,17}))$");

            // Resultado: 
            //       Valid: david.jones@proseware.com 
            //       Valid: d.j@server1.proseware.com 
            //       Valid: jones@ms1.proseware.com 
            //       Invalid: j.@server1.proseware.com 
            //       Invalid: j@proseware.com9 
            //       Valid: js#internal@proseware.com 
            //       Valid: j_9@[129.126.118.1] 
            //       Invalid: j..s@proseware.com 
            //       Invalid: js*@proseware.com 
            //       Invalid: js@proseware..com 
            //       Invalid: js@proseware.com9 
            //       Valid: j.s@server1.proseware.com

            return regex.IsMatch(mitextbox.Text);

        }
Este codigo va para el boton Nuevo
txtcodigo.Text = String.Empty;
            txtcodigo.BackColor = Color.White;
            errorProvider1.SetError(txtcodigo,String.Empty);

            txtnombre.Text = String.Empty;
            txtnombre.BackColor = Color.White;
            errorProvider1.SetError(txtnombre, String.Empty);

            txttelf.Text = String.Empty;
            txttelf.BackColor = Color.White;
            errorProvider1.SetError(txttelf, String.Empty);

            txtweb.Text = String.Empty;
            txtweb.BackColor = Color.White;
            errorProvider1.SetError(txtweb, String.Empty);

            txtemail.Text = String.Empty;
            txtemail.BackColor = Color.White;
            errorProvider1.SetError(txtemail, String.Empty);

            txtsueldo.Text = String.Empty;
            txtsueldo.BackColor = Color.White;
            errorProvider1.SetError(txtsueldo, String.Empty);
y este codigo va en el boton Grabar
if (es_numero(txtcodigo) == true && es_cadena(txtnombre) == true && es_telefono(txttelf) == true &&
                es_url(txtweb) == true && es_email(txtemail) == true && es_decimal(txtsueldo) == true)
            {
                MessageBox.Show("OK");
            }
            else
            {
                MessageBox.Show("Complete todos los campos.");
            }

Truco:Pasar Texto a Binario en Visual Basic.Net

Simple aplicación que convierte un texto a binario. Espero pronto cargar esta misma aplicación con la funcion de convertir binario a texto… Pero mientras, el fomulario quedaría así:
Su código es el siguiente y puedes descargar la aplicación desde AQUI
Private Sub btnaBinario_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnaBinario.Click
        Dim Val As String = Nothing
        Dim Resultado As New System.Text.StringBuilder

        For Each Character As Byte In System.Text.ASCIIEncoding.ASCII.GetBytes(TextBox1.Text)
            Resultado.Append(Convert.ToString(Character, 2).PadLeft(8, "0"))
            Resultado.Append("")
        Next

        Val = Resultado.ToString.Substring(0, Resultado.ToString.Length - 1)
        TextBox2.Text = Val

    End Sub

Deshabilitar boton Cerrar en winforms en Visual Basic.NET


Aqui les dejo este codigo que encontre navegando por Internet, este codigo lo ponen debajo de Public Class:
Dim _enabledcerrar As Boolean = False
     _
    Public Property enabledcerrar() As Boolean
        Get
            Return _enabledcerrar
        End Get
        Set(ByVal value As Boolean)
            If _enabledcerrar <> value Then
                _enabledcerrar = value
            End If
        End Set
    End Property
    Protected Overrides ReadOnly Property CreateParams() As System.Windows.Forms.CreateParams
        Get
            Dim cp As CreateParams = MyBase.CreateParams
            If _enabledcerrar = False Then
                Const CS_NOCLOSE As Integer = &H200
                cp.ClassStyle = cp.ClassStyle Or CS_NOCLOSE
            End If
            Return cp
        End Get
    End Property

lunes, 3 de diciembre de 2012

martes, 27 de noviembre de 2012

Ingles online con videos elllo:Big Apple Baby



Subtitles
00:15 OK. Hello!
00:17 Hi! How you doing?
00:18 I'm doing pretty good.
00:18 Good.
00:19 What's your name?
00:20 My name is Kevin.
00:21 Kevin. And where are you from?
00:22 I'm from Pheonix, Arizona.
00:24 OK. Nice.
00:25 In the United States.
00:27 Wow, were you born in Pheonix?
00:28 Actually, no. I was actually born in New York, because my parents happened to be living in New York at that time.
00:34 My father was a Major Leaugue Baseball player, and the year I was born, 1971,
00:41 he was playing with the Mets in New York City, and my birthday is in May, May 25th, to be precise,
00:49 and so my mother happened to be with my father in New York cause it was baseball season, so I was actually born in New York,
00:56 but I grew up in Pheonix. so Phoenix is what I consider to be my home town.
01:00 Wow! That's Amazing! Do you remember anything about New York?
01:04 Yes, actually, I do have a few memories because we spent probably three years there from the time I was born, obviously,
01:14 until I was about two and a half or three years, we spent summers, or the baseball season in, in New York,
01:21 and we rented a condominium on the second floor, and I remember, it was right across the street from La Guardia Airport,
01:28 and so of course, when I was a little kid, one, one and two years old, I used to love sitting by the kitchen windows,
01:34 and I even remember it was a bay window, the kind where you can roll the window open,
01:40 and I used to roll the window open, and just watch the airplanes take off and land all day.
01:44 Wow! That's cool.
01:46 And another memory I have is the people, the couple that lived below us was an elderly couple and they acted pretty much like our grandparents,
01:56 so I actually called them Grandma and Grandpa, and, uh, Grandma Stevenson used to give me a bath in the, in her, in her kitchen sink, cause I was so small
02:05 Wow!
02:06 That she would actually give me a bath in her kitchen sink, and I remember that as well.
02:09 Wow, those are good memories.

domingo, 11 de noviembre de 2012

Agregar y Grabar en datagridview para guardar en SQL con Transacciones en Visual Basic .NET

Crearemos una forma con los objetos como aparece en la imagen, ademas agregaremos la libreria de sqlclient

Imports System.Data.SqlClient
para el ejemplo crearemos una base de datos con el nombre DBPRUEBA, que nos permita almacenar los datos.
CREATE DATABASE DBPRUEBA
USE DBPRUEBA
CREATE TABLE datos(  
id_datos INT PRIMARY KEY IDENTITY(1,1),  
nombre VARCHAR(50),  
deporte VARCHAR(50),  
fecha_inscripcion datetime    )
Ahora crearemos 4 columnas dentro del datagrid. que nos permitan agregar los datos ingresados.
Ahora para agregar los datos, hemos determinado un textbox para un nombre un combobox con unos deportes y por ultimo un datetimepicker para una fecha. tenemos un boton agregar que nos permitira, agregar un row al datagridview.
Este es el codigo para el boton agregar
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
        If Me.TextBox1.Text <> String.Empty Then
            If Me.ComboBox1.Text <> String.Empty Then                  'agregamos la informacion a un row o fila del datagrid                  
                Me.DataGridView1.Rows.Add(Me.TextBox1.Text, Me.ComboBox1.Text, Me.DateTimePicker1.Value.ToShortDateString)                  'limpiamos los controles
                Me.TextBox1.Text = String.Empty
                Me.ComboBox1.SelectedItem = String.Empty
                Me.DateTimePicker1.Value = Today.Date
            Else
                MessageBox.Show("Ingrese un deporte", "", MessageBoxButtons.OK, MessageBoxIcon.Information)
            End If
        Else
            MessageBox.Show("Ingrese un nombre", "", MessageBoxButtons.OK, MessageBoxIcon.Information)
        End If
    End Sub
una vez tenemos datos dentro de nuestro datagrid, si deseamos eliminar uno de nuestros rows o filas damos click en el boton eliminar, la cual quitara la fila del datagrid.
Private Sub DataGridView1_CellContentClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellContentClick
        'se puede hacer referencia al nombre de la columna para saber donde hicieron click o solo con el e.columnindex sabiendo la posicion de la columna          
        'yo lo manejo asi por que se daran cuenta que en algun caso las columnas pueden aumentar o disminuir           
        'y se complicaria la cosa por que si cambia el numero de columnas habria que corregir siembre el indice            
        'si hicieron clic en la columna eliminar          
        If DataGridView1.Columns(e.ColumnIndex).Name = "Eliminar" Then              'eliminar row
            DataGridView1.Rows.RemoveAt(e.RowIndex)
        End If
    End Sub
Ahora podremos guardar nuestra informacion al hacer click en el boton guardar, aqui se validara que existan datos o mejor filas en el datagrid, ahora recorreremos nuestro datagrid por medio de un For. tendremos una varia de tipo string (SqlString ) donde agregaremos la sentencia para guardar en la base de datos (INSERT INTO), ademas de un araylist para agregar las sentencias.
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        If DataGridView1.Rows.Count > 0 Then
            Dim SqlString As String = String.Empty ' variable a la que asignaremos la sentencia              
            Dim ListSqlStrings As New ArrayList  'arregla donde ingresaremos las sentencias              
            'recorremos el datagrid como ya sabemos siempre se toma desde cero
            For i As Integer = 0 To DataGridView1.Rows.Count - 1                  'creamos la sentencia el row siempre tendra el valor de i para ir pasando de row en row                  
                'el campo .cells(0) indica la columna que esta ese dato, tambien puede hacerlo con el nombre de la celda .cells("Nombre")
                SqlString = "INSERT INTO datos (nombre,deporte,fecha_inscripcion) VALUES ('" + DataGridView1.Rows(i).Cells(0).Value.ToString() + "','" + DataGridView1.Rows(i).Cells(1).Value.ToString() + "','" + DataGridView1.Rows(i).Cells(2).Value.ToString() + "')"
                'agregamos la sentencia a la lista                  
                ListSqlStrings.Add(SqlString)
            Next
            If EjecutarTransaccion(ListSqlStrings) Then
                MessageBox.Show("Info. guardada correctamente")
                Close()
            Else
                MessageBox.Show("La Info. no se guardo")
            End If
        Else
            MessageBox.Show("No hay informacion para guardar")
        End If
    End Sub
Ahora una vez hallamos recorrido el datagrid y tengamos nuestras sentencias, podremos ejecutar nuestra transaccion SQl para guardar en la base de datos. En este punto haciendo un parentesis igualmente podra ejecutar una a una las sentencias si lo desea por medio de un executenonquery, pero para mi lo mas optimo es una transaccion. Volviendo al evento guardar la funcion Public Function EjecutarTransaccion(ByVal ListaSentencias As ArrayList) As Boolean recibira el arraylist y retornara un valor booleano para identificar si se realizo la transaccion. para ejecutar nuestra transaccion necesitamos una conexion como la siguiente.
Public Connection1 As New SqlConnection("Data Source=XSaint;Initial Catalog=DBPRUEBA;Integrated Security=SSPI")
Ahora la funcion ejecutartransaccion se ejecutara, si es correcta la transaccion retornara true de ser incorrecta podremos ver un mensaje y retornara un false
Public Function EjecutarTransaccion(ByVal ListaSentencias As ArrayList) As Boolean
        Dim band As Boolean = False
        If AbrirConexion() Then
            Dim command As SqlCommand = Connection1.CreateCommand()
            Dim transaction As SqlTransaction
            Dim strSentencia As Object
            Dim sentencia As String = ""
            transaction = Connection1.BeginTransaction()
            command.Connection = Connection1
            command.Transaction = transaction
            Try
                For Each strSentencia In ListaSentencias
                    sentencia = strSentencia.ToString()
                    command.CommandText = sentencia.ToString()
                    command.ExecuteNonQuery()
                Next
                transaction.Commit()
                band = True
            Catch ex As Exception
                MessageBox.Show(ex.Message)
                Try
                    transaction.Rollback()
                Catch ex2 As Exception
                    MessageBox.Show(ex2.Message)
                End Try
            Finally
                CerrarConexion()
            End Try
        End If
        Return band
    End Function
Si la transaccion es satisfactoria veremos un mensaje de satisfaccion. la clase transaccion utiliza dos funciones dicionales de abrir y cerrar conexion que nos permite establecer si la conexion es correcta o no.
Public Function AbrirConexion() As Boolean
        Dim band As Boolean = False
        Connection1.Open()
        Try

            band = True
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try
        Return band
    End Function
    Public Function CerrarConexion() As Boolean
        Dim band As Boolean = False
        Connection1.Close()
        Try
            band = True
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try
        Return band
    End Function
ahora podremos ver nuestra informacion, en la base de datos.

sábado, 27 de octubre de 2012

Email phrase bank: Useful expressions and phrases

Commercial: Request for information (customer)
Saying how you got the contact
We met last Thursday on your stand at the Munich Trade Fair.
I am emailing you off your website, which I found through Google.
Giving reason for writing
We are a manufacturer / supplier / provider of ... We are interested in ...
We are a Turkish company exporting to the EU, and we need ...
General requests
We would be grateful for some information about ...
Please send us information about your product range and prices.
Specific requests
In particular, we would like to know ...
Please send full details of your prices, discounts, terms of payment and delivery times.
Could you also say whether there is any minimum order.
Close
An early reply would be greatly appreciated.
I look forward to an early reply, and am sure that there is a market for your products here in Hungary.

Giving information (supplier)
Thanks
Thank you for your email of 4 June inquiring about ...
Giving factual information
We can quote a price of ... CIF / FOB Istanbul.
We can delivery by ... (date) / within ... (period of time)
The goods will be shipped 3 days from receipt of a firm order.
We can offer a discount of ... on orders over ... .
We require payment by bank transfer / letter of credit.
Our normal procedure is to ...
Our normal terms for first-time customers are ...
We can supply the items you require directly from stock.
Saying what you are attaching
I am attaching a document that gives full details of ...
I am attaching our current catalogue and price list as a pdf file.
Highlighting one or two key points
You will see that ...
You will note that our line of .... is on special offer.

Answering specific questions
You will also note that ... Our experience in this field includes ...
We dispatch the goods within 24 hours of a firm order, and for first-time customers our minimum order is $ 1,000.
I am afraid that model is no longer available. However, ...
Close
We feel sure that ... May I suggest that I call you at your convenience to discuss the matter further?
If you need any further information, please do not hesitate to contact me. My direct line is...

Making an order (customer)
Open
Thank you for your recent email, and we accept your quotation. Our completed order form is attached, and we give full bank details below.
Close
Please acknowledge receipt of this order.

Confirming an order (supplier)
Open
Your order has been received.
We can confirm that your goods have been shipped.
You can track shipping details on our website.
Due to exceptional demand these items are temporarily out of stock. We hope to be able to ship your order within ... days and will keep you fully informed. We apologize for any inconvenience this may cause.
Close
We are confident that the goods will meet your expectations. Should there be any questions, please do not hesitate to contact me, either by email or phone

Asking for payment (supplier)
First reminder – open
We are writing concerning a payment of $12,600 for invoice number KJ678 which is now overdue. A copy of the invoice is attached.
According to our records, the sum of $4,500 is still outstanding on your account
First reminder – action
Please send a bank transfer to settle the account, or an explanation of why the balance is still outstanding. If you have already dealt with this matter, please disregard this email.
We could appreciate your cooperation in resolving this matter as soon as possible.
Second/third reminder – open
On (date) I wrote to you regarding your company’s unpaid account , amounting to $4,500. May we please remind you that this amount is still outstanding.
I wish to draw your attention to my previous emails of (dates) about the overdue payment on your account. We are very concerned that the matter has not yet receive your attention.
Second/third reminder – action
We need a bank transfer in full settlement without further delay.
Clearly, this situation cannot be allowed to continue, and we must ask you to take immediate action to settle your account.
If you have any queries on this mater, please do not hesitate to contact me. Thank you for your cooperation.
Final demand – open
Following my emails of (dates) I must inform you that we have still not received payment for the outstanding sum of $4,500.
I wrote to you on (dates) regarding the balance of $12,600 on your account. I attach copies of both emails. This sum is now two months overdue. We are very concerned that the matter has not yet received your attention.
Final demand – action
Unless we receive payment within seven days, we shall have no alternative but to take legal action to recover the money.
In the meantime, your existing credit facilities have been suspended.

Complaints and Apologies
Complaining (customer)
Open
I am writing ...
in connection with my order FS690 which arrived this morning.
to complain about the quality of a product I bought from your website.
to complain about the poor service we received from your company.
to draw your attention to the negative attitude of some people in your customer services section
Complaint
Our order dated 16 September clearly stated that we wanted 1,000 items, however you ...
The goods were faulty / damaged / in poor condition.
There seems to be an error in the invoice /a misunderstanding.
The equipment I ordered has still not been delivered, despite my phone call you last week to say that it is needed urgently.
The product I received was well below the standard expected.
To make matters worse, when I called your company staff ...
Request for action
Please replace the faulty goods as soon as possible.
We must insist on an immediate replacement / full refund.
Unless I receive the goods by the end of this week, I will have no choice but to cancel my order.
Close
I hope that you will deal with this matter promptly as it is causing me considerable inconvenience.

Apologizing (supplier)
Open
I am writing in relation to your recent complaint.
Apologizing I was very concerned to learn about ... Please accept my sincere apologies.
I would like to apologize for the inconvenience you have suffered.
Denying responsibility
We appreciate that this has caused you considerable inconvenience, but we cannot accept any responsibility in this matter.
Promising action
Can you leave it with me? I’ll look into the matter and get back to you tomorrow.
I have looked into the matter and ...
I have spoken to the staff involved, and ...
We will send replacement items / give you a refund immediately.
I can assure you that this will not happen again.
We’re having a temporary problem with ... . We’re doing everything we can to sort it out.
Compensation
To compensate for the inconvenience, we would like to offer you ...
Close
Thank you for bringing this matter to my attention. Please accept my assurance that it will not happen again.
Once again, I hope you will accept my apologies for the inconvenience caused.
I very much hope you will continue to use our services in the future.
If you have any further queries, please do not hesitate to contact me on my direct line...

Personal
Friendly
You heard something, but you are not sure
It seems that ... Apparently, ...
Something is true, but surprising
Actually, ... In fact, ...
Something is obvious or already known
Obviously, ... Of course ...
Good/ bad fortune
Unfortunately, ... Luckily, ...
Saying what you really think
To be honest, ... Frankly, ...
Going back to a topic
Well, ... So, ... Anyway, ...
Changing the topic
Anyway, ... So, ... By the way, ...
Summarizing with the most important point
Anyway, ... Basically, ...
Asking for advice
Formal/Neutral
Informal
OpenI’d like your advice about a problem I have
I’ve got a bit of a problem.
Asking for adviceI was wondering if you had any ideas about ...?
What would you advise me to do?
Do you have any ideas about ...?
What should I do?
ClosePlease write back when you have the time and let me know what you think.Please email me when you get the chance.

Giving
Formal/NeutralInformal
OpenI was sorry to hear about your current difficulties.I’m sorry you’re having such a hard time at the moment.
Giving adviceI think it might be a good idea to ...
Have you thought of ... (+ing)?
I think you should ...
What about ... (+ing)?
ResultThis would mean that ...That way, ...
OptionsI think this option would be preferable to ... (+ing)I think it’s better than ... (+ing)
CloseI hope I have been of some help.I hope I’ve helped a bit.

Suggestions
Making a suggestion
I think we should / I suggest that we / Let’s go to ...
Shall we / Perhaps we could/Why don’t we go to ...?
I suggest... /How about going to ...?
Accepting
It’s a great idea!
I think your idea would work really well.
It might be worth trying.
Rejecting
I’m not so sure about your idea.
It sounds like a good idea, but I don’t think it would work in practice.
It sounds like a good idea, but I can see one or two problems.
Special situations
Thanks
Just a quick note to say many thanks for ...
I really appreciate everything that you have done.
Good luck
Good luck with ...I would like to take this opportunity to wish you every success in the future.
Congratulations
Many congratulations on your promotion / new job.
I was delighted to hear the news about ...
Well done!
Best wishes
Please give my best wishes/regards to ...
Bad news
I was so sorry to hear about ...
I was really sorry to hear you’re not well ...Hope you feel better soon.
If there’s anything I can do to help, let me know.

Job Application
Greeting
Dear Sir/Madam
Reason for writing
With reference to your advertisement on the ... website, I am interested in applying for the post of...
Your background and experience
I am 26 years old and am currently studying for a degree in ... at ... University.
For the last two months I have been working as a ... at ... .
The job itself
I am interested in this job because ...
I feel that I would be well-suited for this job/have a lot of experience in ...
Referring to your CV
I have attached my CV as a Word document. You will notice that I ... as well as ... . You will also notice that ... .
Final comments
I would be grateful if you would consider my application.
You will see from my CV that two people can be contacted as references, one is ... and the other is from ... .
I am available for interview in .../ by phone any weekday afternoon, and you can email me or telephone me on the number below.
Close
I look forward to hearing from you soon.
Yours faithfully
Reports
Report structure

Introduction / Background
As requested at the Board meeting of 18 April, here is my report.
The report will discus / consider / describe / analyze / review ...
The report is based on ...
I have divided the report into three sections.
Findings
The findings / figures / results / investigations show that ...
It appears that ... . This has led to a situation where ...
The graph/table shows that ...
Signposts
As can be seen in table 1 / section 2 / figure 3, ...
As mentioned above, ... / ..., see below.
...and I will discuss this in more detail below /in section 3.2.
Conclusion / Recommendations
I (would like to) suggest /recommend that ...
My specific recommendations are as follows.
Closing comments
Please have a look at the report and let me have your comments.
Please feel free to contact me if you have any questions.
Linking words
Sequence
Firstly / secondly / finally
Talking generally
In general / usually / on the whole
Contrast
However / nevertheless / on the other hand
Adding another point
In addition / moreover / on another point
Examples
For example / for instance / e.g.
Alternatives
Either ... or ... / alternatively / instead of ...
Real (surprising) situation
In fact, / actually, / as a matter of fact
Something is obvious
Clearly / obviously / of course
Most important point
Especially / above all / in particular
Rephrasing
In other words / that is to say / i.e.
Result/consequence
As a result / therefore / for this reason
New topic
In relation to / regarding / with reference to
Careful, balanced style
Giving both sides of an argument
In general ..., however ...
On the whole ..., but ...
Making a statement less general
Many / some ...
Usually / typically / often ...
Making a statement less certain
It is possible / probable that ...
It seems / appears that ...
... tends to be...
Making a comparison less strong
Substantially / considerably / much (+ comparative adjective)
Significantly / relatively (+ comparative adjective)
Marginally / slightly (+ comparative adjective)
Concluding
On balance, ...
Taking all the above points into consideration, ...

sábado, 6 de octubre de 2012

Llenar combobox con campos concatenados de una base de datos en C#

En este ejemplo utilizare la Base de Datos Northwind y concatenare los campos Nombre de Contacto y Compañia en un combobox.
El codigo es el siguiente:

public void llenarProfesor()
        {
            string enlace="Data Source=XSaint;Database=Northwind;Integrated Security=SSPI";
            string conect;            
            //enlace con la base de datos
            SqlConnection conexion = new SqlConnection();
            conexion.ConnectionString = enlace;
            conect = conexion.ConnectionString;
            //se declara el DataSet
            DataSet ds3 = new DataSet();
            //se indica la consulta e sql donde se elige el ID_Profesor
            //y se concatenan los campos Nombre y Apellido_P
            //en una variable llamada Name_Full
            SqlDataAdapter da3 = new SqlDataAdapter("Select CustomerID,(ContactName + \' \' + CompanyName) as Name_Full FROM Customers", conect);
            //se especifica la tabla
            da3.Fill(ds3, "Customers");
            comboBox1.DataSource = ds3.Tables[0].DefaultView;
            //el valor real será el ID_Profesor
            comboBox1.ValueMember = "CustomerID";
            //lo que mostrará sera la variable Name_Full la cual tiene concatenados los campos Nombre y Apellido_P
            comboBox1.DisplayMember = "Name_Full";
        }
        private void Form1_Load(object sender, EventArgs e)
        {
            llenarProfesor();
        }

Como poner letra capital de todas las palabras de un string en C#

A menudo necesitamos capitalizar la primera letra de algunas palabras o algun texto(por ejemplo cuando queremos mostrar nombres completos de personas o ciudades, nombres, etcetera).
Como la clase string no tiene un metodo para hacer esto nosotros podemos pensar que no hay una solucion built-in en C# para este problema.
Bueno en realidad hay 2 formas de hacer esto:
Para este proyecto agregaremos 2 textbox y un boton:
Solucion 1
public static string Capitalize(string value)
        {
            return System.Globalization.CultureInfo.CurrentCulture.TextInfo.ToTitleCase(value);
        }

        private void button1_Click(object sender, EventArgs e)
        {
            textBox2.Text = Capitalize(textBox1.Text);            
        }

public static string CapitalizeWords(string value)
        {
            if (value == null)
                throw new ArgumentNullException("value");
            if (value.Length == 0)
                return value;

            StringBuilder result = new StringBuilder(value);
            result[0] = char.ToUpper(result[0]);
            for (int i = 1; i < result.Length; ++i)
            {
                if (char.IsWhiteSpace(result[i - 1]))
                    result[i] = char.ToUpper(result[i]);
            }
            return result.ToString();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            textBox2.Text = CapitalizeWords(textBox1.Text);            
        }

Usando Regex matches para comprobar si un String es alphanumerico en C#

El metodo regex.match de C# es tipicamente usado para validar un string o para asegurar que un string esta conformado de un patron particular sin necesidad de manipularlo. Abajo utilizo un metodo de extension de strings que usa regex matches en C# para comprobar si el string es alphanumerico. Retornara verdadero si el string dado contiene solo numeros y letras del alfabeto.
using System.Text.RegularExpressions;
namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        public static class CheckString
        {
            public static bool IsAlphanumeric(string source)
            {
                Regex pattern = new Regex("[^0-9a-zA-Z]");
                return !pattern.IsMatch(source);
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            string testString = textBox1.Text;

            if (CheckString.IsAlphanumeric(testString))
                textBox2.Text="Yes string is Alphanumeric!";
            else
                textBox2.Text="No string is not Alphanumeric!";

            
        }

viernes, 5 de octubre de 2012

AutoCompletar TextBox desde base de datos con Northwind y VB.NET

Hay que tener en cuenta que para utilizar esta opción, debes asignar las siguientes propiedades:
AutoCompleteMode: que sirve para indicar cómo queremos que se muestren los datos que encuentra mientras se escribe en el control.
AutoCompleteSource: que sirve para indicarle de dónde se obtendrán los datos que se usarán mientras se escribe.
En este ejemplo se utiliza AutoCompleteSource asignado a CustomSource debido a que la fuente de datos la obtenemos desde una ruta personalizada.
En el evento Load del formulario, se llama a la función AutoCompletar como se muestra debajo, asignándole el control TextBox.
Imports System.Data.SqlClient
Public Class Form1

    Dim myCommand As SqlCommand
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        AutoCompletar(Me.TextBox1)
        Me.ActiveControl = TextBox1
    End Sub
Esta es la función AutoCompletar que se deberá utilizar asignándole el control TextBox.
Public Function AutoCompletar(ByVal Control As TextBox) As AutoCompleteStringCollection
        Dim Coleccion As New AutoCompleteStringCollection
        Dim Comando, Coneccion As String
        'Dim myConnection As SqlConnection
        Comando = "select LastName from Employees"
        'Creamos una nueva cadena de coneccion 
        Coneccion = "Data Source=XSaint;Initial Catalog=Northwind;Integrated Security=SSPI"
        'myConnection = New SqlConnection(Coneccion)
        Using myConnection As New SqlConnection(Coneccion)
            Dim Ejecutar As New SqlClient.SqlCommand(Comando, myConnection)
            'Abrimos la coneccion
            myConnection.Open()
            Dim Lector As SqlDataReader = Ejecutar.ExecuteReader()
            ' Realizamos un Loop mientras se est‚ leyendo.
            While Lector.Read()
                Coleccion.AddRange(New String() {Lector(0)})
            End While
            'Cerramos el SqlReader
            Lector.Close()
            'Cerramos la coneccion
            myConnection.Close()
        End Using
        'Ajustamos el control TextBox o ComboBox para recibir los datos de la siguiente manera.
        With Control
            .AutoCompleteMode = AutoCompleteMode.Suggest
            .AutoCompleteSource = AutoCompleteSource.CustomSource
            .AutoCompleteCustomSource = Coleccion
        End With
        'Devolvemos los datos recuperados de la base de datos
        Return Coleccion
    End Function
End Class

Cambiar color de filas en un dataGridView con CheckBox en VB.NET

Ejemplo para alternar mediante la propiedad backcolor del objeto alternatingrowsdefaultcellstyle , el color de filas en un control datagridview
CONTROLES
  1. Un DataGridview ( DataGridView1 )
  2. un CheckBox
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        With ListBox1.Items
            .Add("1")
            .Add("2")
            .Add("3")
            .Add("1")
            .Add("2")
            .Add("3")
            ListBox1.SelectedIndex = 0
        End With
        Button1.Text = "Eliminar duplicados "
    End Sub
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        MsgBox(Eliminar(ListBox1), MsgBoxStyle.Information, "Elementos duplicados en el List ")
    End Sub
    Function Eliminar(ByVal LB As ListBox) As Int32
        Dim i As Int32
        Dim j As Int32
        Dim n As Int32           ' Recorre los items ( compara empezando desde el primero , de abajo hacia arriba)         
        For i = 0 To LB.Items.Count - 2
            For j = LB.Items.Count - 1 To i + 1 Step -1                 ' ... si es el mismo                 
                If LB.Items(i).ToString = LB.Items(j).ToString Then
                    LB.Items.RemoveAt(j) ' elimina el elemento indicando el índice                     
                    n += 1 'lleva la cuenta de los duplicados                 
                End If
            Next
        Next
        Return n ' retorna los eliminados     End Function End Class 
    End Function

Eliminar duplicados de un listbox en VB.NET

Simple función en vb.net que recorre todos los elementos de la lista de un
combo o listbox para poder eliminar los elementos o items duplicados
El ejemplo comienza comparando desde el primer item con todos los demás
empezando desde abajo hacia arriba. Si el elemento es el mismo lo elimina con el
método RemoveAt del ListBox indicando el índice
Colocar en el formulario
  1. Un control ListBox llamado Listbox1
  2. Un control Button llamado Button1

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        With ListBox1.Items
            .Add("1")
            .Add("2")
            .Add("3")
            .Add("1")
            .Add("2")
            .Add("3")
            ListBox1.SelectedIndex = 0
        End With
        Button1.Text = "Eliminar duplicados "
    End Sub
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        MsgBox(Eliminar(ListBox1), MsgBoxStyle.Information, "Elementos duplicados en el List ")
    End Sub
    Function Eliminar(ByVal LB As ListBox) As Int32
        Dim i As Int32
        Dim j As Int32
        Dim n As Int32           ' Recorre los items ( compara empezando desde el primero , de abajo hacia arriba)         
        For i = 0 To LB.Items.Count - 2
            For j = LB.Items.Count - 1 To i + 1 Step -1                 ' ... si es el mismo                 
                If LB.Items(i).ToString = LB.Items(j).ToString Then
                    LB.Items.RemoveAt(j) ' elimina el elemento indicando el índice                     
                    n += 1 'lleva la cuenta de los duplicados                 
                End If
            Next
        Next
        Return n ' retorna los eliminados     End Function End Class 
    End Function

domingo, 30 de septiembre de 2012

Truco:Abrir una dirección URL o un Programa con C++

Para abrir enlaces a través de un programa en c++ , se debe utiliza la función ShellExecute de la API de Windows.
Una sencilla aplicación que pregunte al usuario si desea visitar mi nuevo blog sería:
#include <windows.h>
#include <iostream>

using namespace std;
int main()
{
int val = MessageBox(NULL,"Quieres Visitar mi nuevo Blog?","Ventantita",MB_YESNO);
cout<<"Valor Retornado: "<<val;

if(val==6)
 {
        ShellExecute(NULL, "open", "http://www.elnaufragodelared.com/",NULL, NULL, SW_SHOWNORMAL);

 }
return 0;
}
De igual manera si deseo Ejecutar un programa externo como el Emule sería así:
#include <windows.h>
#include <iostream>
using namespace std;
int main()
{
        ShellExecute(NULL, "open", "C:/Archivos de programa/eMule/emule.exe",NULL, NULL, SW_SHOWNORMAL);
        return 0;
}

NOTA:
El ejemplo fue compilado utilizando el IDE , Codeblocks.

Uso de SET NOCOUNT en SQLServer

En SQLServer se usa SET NOCOUNT para devolver o no la cantidad de filas afectadas por alguna sentencia o transacción ejecutada. SET NOCOUNT tiene dos estados:
SET NOCOUNT ON : Inhabilita la cuenta del número de filas afectadas por una instrucción Transact-SQL
SET NOCOUNT OFF: Habilita la cuenta del número de filas afectadas por una instrucción Transact-SQL

Cuando se usa SET NOCOUNT ON se mejora el rendimiento del servidor porque omite la devolución del numero de filas afectadas al cliente o terminal que ha realizado la consulta, pero hay casos en que es necesario obtener el número de registros afectados segun nuestra necesidad, por ello se recomienda analizar muy bien cuando usar SET NOCOUNT ON.
El siguiente ejemplo hace una consulta a la tabla customers de la base de datos Northwind usando los dos estados de SET NOCOUNT, se puede apreciar la diferencia.
Usando SET NOCOUNT ON
SET NOCOUNT ON
 
select * from dbo.customers
where country = 'France'
GO

Usando SET NOCOUNT OFF


Usando delegados para intercambiar informacion entre ChildForms de un Parent Form en C#.NET

A menudo en aplicaciones MDI, necesitamos intercambiar informacion entre Child Forms que son instanciados por el mismo Parent Form. En tales casos, los delegados son un modo adecuado para intercambiar como.
En este programa tendremos un Form Padre y 2 Child Forms. Los forms hijos seran instanciados por el padre. El segundo form hijo va a interactuar con el primero a traves del Parent Form usando delegados. En este ejemplo mostraremos como usar delegados para realizar esta interaccion. Puedes utilizar las mismas tacticas para desarrollar otros tipos similares de procedimientos.
Lo que sea que el usuario escriba en el textbox del segundo formulario y luego de click en el boton Submit, ese texto sera mostrado en el label del primer formulario. Esta interaccion entre forms hijos es monitoreada y manejada por el form padre.
Para esto en el Form Padre colocamos 2 botones como la figura de arriba y cuando pulsemos el primer boton, instanciamos el primer form y el Parent Form creara un puntero a una funcion del formulario.
private void btnFirst_Click(object sender, EventArgs e)
        {
            frmFirstChild FrmFirst = new frmFirstChild();
            FrmFirst.MdiParent = this;
            FrmFirst.Show();
            FrmFirst.Activate();
            SayHello = FrmFirst.FuncDisplayMsg;
        }
Esto quiere decir, que el delegado SayHello del Parent Form mantiene un puntero al metodo del primer formulario. La declaracion del primer formulario es asi:
private delegate void DelSayHello(string Msg);
        private DelSayHello SayHello;
Y el metodo que sera llamado es(este metodo estara dentro del Primer Form):
public void FuncDisplayMsg(string Msg)
        {
            this.lblMsg.Text = Msg;
        }
Ahora el Form padre llamara a este metodo del primer Form Child cuando un metodo del segundo Child Form pase un valor al padre. Para hacer esto, el Parent Form tiene un metodo que sera llamado del segundo Child Form(via delegados). El metodo es:
private void InvokeFunc(string Msg)
        {
            if (SayHello != null)
                SayHello.Invoke(Msg);
        }
Ahora que pasara cuando el segundo Child Form sea instanciado?. El segundo Child Form tiene un delegado que tiene un puntero del metodo mencionado arriba. El codigo del evento click sera asi:
private void btnSecond_Click(object sender, EventArgs e)
        {
            frmSecondChild FrmSecond = new frmSecondChild();
            FrmSecond.MdiParent = this;
            FrmSecond.InvokeDel = this.InvokeFunc;
            FrmSecond.Show();
            FrmSecond.Activate();
        }
Y finalmente, cuando el usuario clickee en el boton Submit del segundo Child Form, el texto del textbox es pasado al Parent Form, el cual a cambio pasa el valor al primer Child Form y el texto es mostrado. Este sera el codigo del segundo Form:
public delegate void DelInvoke(string Msg);
        public DelInvoke InvokeDel;

        private void btnSubmit_Click(object sender, EventArgs e)
        {
            if (this.InvokeDel != null)
                InvokeDel.Invoke(this.txtMsg.Text);
        }

sábado, 29 de septiembre de 2012

Truco:LowerCase a UpperCase mientras escribimos en TextBox en ASP.NET con C#

Para darle una mejor vistocidad a nuestros proyectos web donde se necesitan escribir ciertos campos en mayusculas y mostrarlos al usuario en tiempo real.
Agregamos este codigo en el codigo .aspx:
<head runat="server">
    <title>Página sin título</title>
    <script type="text/javascript" src="http://ajax.microsoft.com/ajax/jQuery/jquery-1.4.1-vsdoc.js"></script>
    <script type="text/javascript">
        function changeToUpperCase(controlName) {
            document.getElementById(controlName).value = document.getElementById(controlName).value.toUpperCase();
        }

    </script>

</head>
<body>
    <form id="form1" runat="server">
    <div>

        <asp:TextBox ID="TextBox1" runat="server" onKeyPress="changeToUpperCase(this.id)"></asp:TextBox>

    </div>
    </form>
</body>

Mostrar texto de marca de agua en el campo password en ASP.NET

Para que salga el efecto que ven en la imagen en el codigo html de su sitio web agregan este codigo y listo =)
<head runat="server">
    <title>Página sin título</title>
    <script type="text/javascript" src="http://ajax.microsoft.com/ajax/jQuery/jquery-1.4.1-vsdoc.js"></script>
    <script type="text/javascript">

        $(document).ready(function () {

            $("#txtPasswordWaterMark").show();
            $("#txtPasswordWaterMark").addClass("waterMark");
            $("#txtPasswordWaterMark").val("Password");
            $("#<%= txtPassword.ClientID  %>").hide();

            $("#txtPasswordWaterMark").focus(function () {
                $(this).hide();
                $("#<%= txtPassword.ClientID  %>").show();
                $("#<%= txtPassword.ClientID  %>").focus();
            });

//            $("#txtPasswordWaterMark").keydown(function () {
//                $(this).hide();
//                $("#<%= txtPassword.ClientID  %>").show();
//                $("#<%= txtPassword.ClientID  %>").focus();
//            });

            $("#<%= txtPassword.ClientID  %>").blur(function () {

                if ($(this).val() == "") {
                    $("#<%= txtPassword.ClientID  %>").hide();
                    $("#txtPasswordWaterMark").show();
                }

            });

        });

    </script>
    <style type="text/css">

      .waterMark{
            color : #9B9B9B;
        }

    </style>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    <asp:TextBox ID="txtPassword" TextMode="Password" runat="server"></asp:TextBox>
     <input type="text" id="txtPasswordWaterMark" />
    </div>
    </form>
</body>

Como ver imagen previa antes de guardarlo en Base de Datos en ASP.NET

Para este ejemplo agregamos un control tipo FileUpload, un boton de vista previa que al pulsarlo nos muestre la imagen y un textbox que extraera el nombre de la imagen
Este sera el codigo .aspx
<body>
    <form id="form1" runat="server">
    <div>
    
        <asp:FileUpload ID="FileUpload1" runat="server" />
        <asp:Button ID="Button1" runat="server" onclick="Button1_Click" 
            Text="Vista Previa" />
        <br />
        <asp:Button ID="Button2" runat="server" Text="Nombre de Archivo" />
        <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
        <asp:Image ID="Image1" runat="server" />
    </div>
    </form>
</body>
Y este codigo sera del lado del servidor
Code Behind :
string imgname;
    protected void Page_Load(object sender, EventArgs e)
    {

    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        string L_path = "No Images";
        imgname = FileUpload1.FileName;
        TextBox1.Text = imgname;

        // break the pathe, collect file type then match.
        string filetype;
        filetype = System.IO.Path.GetExtension(FileUpload1.PostedFile.FileName);
        if (filetype.ToLower().Contains(".jpg")  ||  filetype.ToLower().Contains(".jpeg") || filetype.ToLower().Contains(".bmp") || filetype.ToLower().Contains(".png"))
        {

            ClientScript.RegisterStartupScript(typeof(string), "You choosen the file in wrong formated.. !!!", "");

        }
        if (FileUpload1.PostedFile.ContentLength > 5242880) // byte size
        {
            Page.ClientScript.RegisterStartupScript(Type.GetType("System.String"), "addScript", "alert('Image Size is should be Less Than 5 MB' )", true);

        }
        if (FileUpload1.HasFile)
        {
            L_path = Server.MapPath("~/Images/").ToString();
            L_path += imgname;
            FileUpload1.SaveAs(L_path); // Temporary saved 

        }
        else
        {
            Page.ClientScript.RegisterStartupScript(Type.GetType("System.String"), "addScript", "alert('No Image is Selected..)", true);

        }
        Image1.ImageUrl = "~/Images/" + imgname;

        Page.ClientScript.RegisterStartupScript(Type.GetType("System.String"), "addScript", "alert('Image is Reflected..Plz Save it)", true);

        // After saving into Database delete current file from Application.
    }

Como loguearse en un WebSite sin Base de Datos en ASP.NET

En este ejemplo estoy usando un archivo .txt para almacenar las credenciales del login con separador de barra (|). Este archivo estara dentro de tu aplicacion. En este ejemplo nos loguearemos sin utilizar Base de Datos.
Usuario y password del archivo: sa|123
Nombre del txt: LoginCredentials.txt
El codigo de la aprte html sera el siguiente:
<body>
    <form id="form1" runat="server">
    <div>
    
        <asp:Label ID="Label1" runat="server" Text="Usuario"></asp:Label>
        <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
        <br />
        <asp:Label ID="Label2" runat="server" Text="Password"></asp:Label>
        <asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
        
        <br />
        <asp:Button ID="Button1" runat="server" Text="Login" onclick="Button1_Click" />
        
    </div>
    </form>
</body>
El codigo del lado del servidor sera este:
String contents;
    System.IO.StreamReader sr;
    static int count;
    protected void Page_Load(object sender, EventArgs e)
    {
        count = 0;
    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        if (System.IO.File.Exists(Server.MapPath("LoginCredentials.txt")))
        {
            string FILENAME = Server.MapPath("LoginCredentials.txt");
            sr = System.IO.File.OpenText(FILENAME);
            contents = sr.ReadToEnd();
            if (contents.IndexOf(TextBox1.Text.Trim()) > -1)
            {
                count = count + 1;
            }
            if (contents.IndexOf(TextBox2.Text.Trim()) > -1 && count == 1)
            {

                Page.ClientScript.RegisterStartupScript(Type.GetType("System.String"), "addScript", "alert('Login Successfully..... ')", true);
            }
            else
            {
                Page.ClientScript.RegisterStartupScript(Type.GetType("System.String"), "addScript", "alert('Login Invalid...')", true);
            }
        }
    }
Si se loguean con el usuario sa y password 123 les saldra este mensaje:

Reescribiendo metodos de URL en ASP.NET

En este proyecto web lo que haremos sera mostrar una lista de artistas y al seleccionar uno se muestra en la URL y se carga otra pagina:

Primero descargamos el componente URL Rewriter .NET aqui:http://www.dotnetdevelopment.net/tutorials/URLRewriterCompiled.zip Volvemos a nuestro proyecto y vamos a la opcion agregar referencia:
Una vez aqui agregamos la dl

Una vez aqui agregamos la dll que descargamos(Intelligencia.UrlRewriter.dll).
Ahora en el proyecto crearemos una pagina aspx llamada Music.aspx.
Ahora en el Web.config agregamos la siguiente linea debajo del configSection
<section name="rewriter" requirePermission="false" type="Intelligencia.UrlRewriter.Configuration.RewriterConfigurationSectionHandler, Intelligencia.UrlRewriter"/>
Ahora agregamos esta linea justo abajo de httpModules
<add type="Intelligencia.UrlRewriter.RewriterHttpModule, Intelligencia.UrlRewriter" name="UrlRewriter" />
Ahora la pagina Default.aspx se vera asi:
El codigo de la pagina sera el siguiente
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
       <h1>Music Page</h1>
        
        <p>Select your favorite artist below.</p>
        
        <ul>
            <li><a href="music.aspx?artist=Beatles">Beatles</a></li>
            <li><a href="music.aspx?artist=Led Zeppelin">Led Zeppelin</a></li>
            <li><a href="music.aspx?artist=Rolling Stones">Rolling Stones</a></li>
        </ul>
    </div>
    </form>
</body>
Como se ve las rutas URL son estructuras URL relativas. Lo que queremos es reescribir la URL original y que se vea asi:

music.aspx?artist=Beatles
music.aspx?artist=Led Zeppelin
music.aspx?artist=Rolling Stones
en la segunda pagina llamada music.aspx se vera asi:
el codigo sera el siguiente:
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    You are visiting the <font color=maroon><b><asp:Label ID="Label1" runat="server" Text="Label"></asp:Label></b></font> page. Thank you.
    </div>
    </form>
</body>
nuestro codigo en el Load de la pagina sera este
.vb
'Get query string value
        Dim querystring_value As String = Request.QueryString("artist")
        'Display the retrieve artist value to the page
        Label1.Text = querystring_value.ToUpper()
espero les haya servido el ejemplo.

Reescribir URLs en ASP.NET con URLRewriter.NET

Reescribir URL's tiene muchos beneficios, listare los principales:
  1. Apariencia SEO amigable

  2. URLs seguras

  3. No necesitamos cambiar el bookmark con cambios en su estructura

Antes de reescribir la URL my URL se veia asi: http://localhost:2661/URLRewrite2/DynamicPage.aspx?MyTitleId=1 Despues de reescribir la URL la URL se ve asi http://localhost:2661/URLRewrite2/Article/Asp-Net-website-paths-1.aspx Vamos a reescribir la URL con un simple ejemplo Este sitio web mostrara una lista de articulos en un GridView y al seleccionar uno de ellos, mostrara dinamicamente el contenido del articulo generado. Antes de reescribir la URL cuando tu pongas el mouse sobre el primer link del articulo "ASP.NET Ruta del Website" usamos el query string para mostrar el contenido del articulo.
La pagina dinamica muestra el QueryString, antes de reescribir la URL.
Despues de reescribir la URL lograremos una URL amigable la cual nos mostrara el contenido de los articulos.
Para este ejemplo crearemos una base de datos llamada Articletable. Despues crearemos una tabla llamada Articletable la cual tendra los campos ID, titulo, descripcion y nombre de autor. El titulo del link sera creado en el control GridView de ASP.NET. Cuando demos click en el titulo del link nos redigira a la pagina dinamica. El script para crear la tabla sera el siguiente:
CREATE TABLE [dbo].[Articletable](
      [ID] [int] NOT NULL,
      [Title] [varchar](200) NULL,
      [Description] [varchar](400) NULL,
      [Author] [varchar](50) NULL
)
Insertamos datos en esta tabla
INSERT INTO Articletable VALUES(1,'How to validate dropdownlist in asp.net','Here, we will learn how to validate a DropDownList in ASP.NET.','Rohatash Kumar');
GO
INSERT INTO Articletable VALUES(2,'Introduction to .NET Assemblies in VB.NET',' Here is a comprehensive introduction to .NET assemblies.','sunil Kumar');
go
INSERT INTO Articletable VALUES(3,'BinaryReader and BinaryWriter classes in VB.NET','In this article I will explain about BinaryReader and BinaryWriter Classes in VB.NET.','Deepak Kumar');
 
go
INSERT INTO Articletable VALUES(4,'StreamWriter class in VB.NET','This article shows how to create a new text file and write a string to it.','Rohatash Kumar');
go
Ahora en ASP.NET Paso 1: Descargamos los archivos binarios para URLRewriter.NET(Inteligencia.URLRewriter.dll) Paso 2: Agregamos una referencia a esos archivos binarios, damos click derecho y agregamos referencia.
Paso 3: Creamos 2 paginas .aspx llamadas Default.aspx y DynamicPage.aspx Paso 4: Actualizamos el archivo Web.config para hacer que el URLRewriter funcione.
<configuration>

<configSections>
<section name="rewriter"
requirePermission="false"
type="Intelligencia.UrlRewriter.Configuration.RewriterConfigurationSectionHandler, Intelligencia.UrlRewriter" />
</configSections>

<system.web>

<httpModules>
<add name="UrlRewriter" type="Intelligencia.UrlRewriter.RewriterHttpModule, Intelligencia.UrlRewriter" />
</httpModules>

</system.web>

<system.webServer>

<modules runAllManagedModulesForAllRequests="true">
<add name="UrlRewriter" type="Intelligencia.UrlRewriter.RewriterHttpModule" />
</modules>

<validation validateIntegratedModeConfiguration="false" />

</system.webServer>

<rewriter>
<rewrite url="~/Article/(.+)-(.+).aspx" to="~/DynamicPage.aspx?MyTitleId=$2"/>
</rewriter>

</configuration>
Paso 5: En el Default.aspx agregamos el GridView que lucira asi:
agregamos este codigo en la ventana de codigo:
<head runat="server">
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>    
        <h1>
            <span style="color: #009900">After URL Rewriting</span></h1>
        <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" BackColor="#DEBA84" BorderColor="#DEBA84" BorderStyle="None" BorderWidth="1px" CellPadding="3" CellSpacing="2" Width="788px">
            <FooterStyle BackColor="#F7DFB5" ForeColor="#8C4510" />
            <Columns>
                <asp:TemplateField HeaderText="Title">
                    <ItemTemplate>
                        <asp:HyperLink ID="hlTitle" runat="server" Text='<%#DataBinder.Eval(Container.DataItem,"Title")%>' NavigateUrl='<%#GenerateURL(DataBinder.Eval(Container.DataItem,"Title"),DataBinder.Eval(Container.DataItem,"Id"))%>'></asp:HyperLink>                        
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField HeaderText="Description">
                    <ItemTemplate>
                        <asp:Label ID="lblDesc" runat="server" Text='<%#DataBinder.Eval(Container.DataItem,"Description")%>'></asp:Label>
                    </ItemTemplate>
                </asp:TemplateField>
            </Columns>
            <RowStyle BackColor="#FFF7E7" ForeColor="#8C4510" />
            <SelectedRowStyle BackColor="#738A9C" Font-Bold="True" ForeColor="White" />
            <PagerStyle ForeColor="#8C4510" HorizontalAlign="Center" />
            <HeaderStyle BackColor="#A55129" Font-Bold="True" ForeColor="White" />
        </asp:GridView>
         
    </div>
    </form>
</body>
Y este sera el codigo .cs
protected void Page_Load(object sender, EventArgs e)
    {
        GridView1.DataSource = GetData();
        GridView1.DataBind();
    }

    //public static string GenerateURL(object Title, object strId)
    //{
    //    string strTitle = Title.ToString();

    //    strTitle = "~/DynamicPage.aspx?MyTitleId=" + strId;

    //    return strTitle;
    //}

    public static string GenerateURL(object Title, object strId)
    {
        string strTitle = Title.ToString();

        #region Generate SEO Friendly URL based on Title
        //Trim Start and End Spaces.
        strTitle = strTitle.Trim();

        //Trim "-" Hyphen
        strTitle = strTitle.Trim('-');

        strTitle = strTitle.ToLower();
        char[] chars = @"$%#@!*?;:~`+=()[]{}|\'<>,/^&"".".ToCharArray();
        strTitle = strTitle.Replace("c#", "C-Sharp");
        strTitle = strTitle.Replace("vb.net", "VB-Net");
        strTitle = strTitle.Replace("asp.net", "Asp-Net");

        //Replace . with - hyphen
        strTitle = strTitle.Replace(".", "-");

        //Replace Special-Characters
        for (int i = 0; i < chars.Length; i++)
        {
            string strChar = chars.GetValue(i).ToString();
            if (strTitle.Contains(strChar))
            {
                strTitle = strTitle.Replace(strChar, string.Empty);
            }
        }

        //Replace all spaces with one "-" hyphen
        strTitle = strTitle.Replace(" ", "-");

        //Replace multiple "-" hyphen with single "-" hyphen.
        strTitle = strTitle.Replace("--", "-");
        strTitle = strTitle.Replace("---", "-");
        strTitle = strTitle.Replace("----", "-");
        strTitle = strTitle.Replace("-----", "-");
        strTitle = strTitle.Replace("----", "-");
        strTitle = strTitle.Replace("---", "-");
        strTitle = strTitle.Replace("--", "-");

        //Run the code again...
        //Trim Start and End Spaces.
        strTitle = strTitle.Trim();

        //Trim "-" Hyphen
        strTitle = strTitle.Trim('-');
        #endregion

        //Append ID at the end of SEO Friendly URL
        strTitle = "~/Article/" + strTitle + "-" + strId + ".aspx";

        return strTitle;
    }

    private DataTable GetData()
    {
        string strConn = ConfigurationManager.ConnectionStrings["connStr"].ToString();
        SqlConnection conn = new SqlConnection(strConn);
        SqlDataAdapter da = new SqlDataAdapter("select Id,Title,Description from Articletable", conn);
        DataSet ds = new DataSet();
        da.Fill(ds, "Articletable");
        return ds.Tables["Articletable"];
    }
Olvide decirles crean una cadena de conexion en el Webconfig.
 <connectionStrings>
  <add name="connStr" connectionString="Data Source=XSaint;Initial Catalog=Articletable;Integrated Security=SSPI"/>
 </connectionStrings>
Ahora vamos a la segunda pagina DynamicPage.aspx El webform se vera asi:
El codigo ASP.NET para la pagina sera el siguiente:
<head runat="server">
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <h1><img src="../Images/article.gif" />Article</h1>
        <b>Title:</b><asp:Label ID="lblTitle" runat="server" Text="Label" Font-Bold="true" ForeColor="blue"></asp:Label><br /><br />
        <b>Author:</b><asp:Label ID="lblauthor" runat="server" Text="Label" Font-Bold="true" ForeColor="blue"></asp:Label><br /><br />
        <b>Description:</b><br />
        <asp:Label ID="lblDescription" runat="server" Text="Label"></asp:Label><br /><br />
        <asp:Button ID="Button1" runat="server" Text="Make PAGE POSTBACK"/><br /><br />
        <a href="javascript:history.go(-1)">Back</a>
    </div>        
    </form>
</body>
Y el codigo .cs sera el siguiente:
protected void Page_Load(object sender, EventArgs e)
    {
        if (Request.QueryString["MyTitleId"] != null)
        {
            string strId = Request.QueryString["MyTitleId"].ToString();
            DisplayArticle(strId);    
        }
    }

    private void DisplayArticle(string strId)
    {     
        string strConn = ConfigurationManager.ConnectionStrings["connStr"].ToString();
        SqlConnection conn = new SqlConnection(strConn);
        SqlDataAdapter da = new SqlDataAdapter("select Id,Title,Description,author from Articletable where Id=" + strId, conn);
        DataSet ds = new DataSet();
        da.Fill(ds, "Articletable");
        lblTitle.Text = ds.Tables["Articletable"].Rows[0][1].ToString();
        lblDescription.Text = ds.Tables["Articletable"].Rows[0][2].ToString();
        lblauthor.Text = ds.Tables["Articletable"].Rows[0][3].ToString();  
    }
Si ghubiese algun error diganme para ayudrles, pero con el codigo que puse debe estar ejecutandose como en la figura de arriba. Espero les sirva el codigo.