Convierte volales con tilde a vocales sin tilde en Funcion SQL Server 2005

OBJETIVO:

Construir una aplicación que permita realizar consultas en una BD sin importar si los valores almacenados en la BD contiene Tildes.

codigo fuente Descarguelo del link http://cid-287250a527da0fb5.skydrive.live.com/self.aspx/Fuentes/ConvertirVocales.zip?ccr=8238

Cree una base de Datos en SQL Server 2005 y ejecute la siguiente función en una ventana de una nueva consulta observara que se crea una función en la BD como ilustra la figura 1. En la carpeta funciones con valor escalar.

 

/********************************************************************************************************

* Elaborado Por : Omar Acosta *

* Acción : Convierte volales con tilde a vocales sin tilde

* Fecha Creación : 21-01-2009 *

*********************************************************************************************************/

–select dbo.fnConvertirCaracteres(‘ omÁR AÓSTÁ casás’)

CREATE FUNCTION [dbo].[fnConvertirCaracteres]

(

    @CadenaxTransformar VARCHAR(100)

)

RETURNS VARCHAR(100)

AS

BEGIN

    RETURN REPLACE ( REPLACE( REPLACE( REPLACE( REPLACE (@CadenaxTransformar , ‘á’ , ‘a’) , ‘é’,‘e’) ,‘í’,‘i’) ,‘ó’,‘o’ ) ,‘ú’,‘u’)

END

UTILIZACION

Cree una aplicación WEB en c# y adicione en el formulario Default.aspx dos controles Label para etiquetar apellidos y nombres, dos controles TextBox para capturar apellidos y nombres, un control button para ejecutar la búsqueda en la BD y Un control GridView para mostrar los resultados de la consulta en la BD. Ver figura 2.

Cuando el usuario realicé una búsqueda por ejemplo por nombre del contacto igual a josé el resultado en la grilla debera traer todoas las coincidencias de jose con tilde o sin tilde como ilustra la imagen.

Observe que el SP se llama admContactoXBuscar recibe dos valores para los apellidos y nombres.

–admContactoXBuscar ‘jose’ , ”

ALTER PROCEDURE [dbo].[admContactoXBuscar]

    @Nombres                        VARCHAR(100),

    @Apellidos                    VARCHAR(100)

AS

SELECT    contactoId, contactoNombres, contactoApellidos, contactoDireccionResidencia FROM        conContacto

WHERE        dbo.fnConvertirCaracteres(conContacto.contactoNombres) LIKE COALESCE(‘%’ + NULLIF(@Nombres,) + ‘%’ ,dbo.fnConvertirCaracteres(ISNULL(conContacto.contactoNombres,)))

AND dbo.fnConvertirCaracteres(conContacto.contactoApellidos) LIKE COALESCE(‘%’ + NULLIF(@Apellidos,) + ‘%’ ,dbo.fnConvertirCaracteres(ISNULL(conContacto.contactoApellidos,)))

            

El procedimento Alamacenado anterior     utiliza en el where la funcion fnConvertirCaracteres para realizar la consulta sin tener en cuenta las tildes en los campos Apellidos y Nombres.      

El código para ejecutar el procedimiento almacenado lo he realizado en el mismo botón de consultar contacto se conecta a una BD Sql Server esta parte debe ir en la capa de Datos o persistencia:

protected void Button1_Click(object sender, EventArgs e)

{

//manejo de la conexión

string sCnn = ConfigurationManager.ConnectionStrings["BDContactos"].ConnectionString;

SqlConnection dataConnection = new SqlConnection(sCnn);

//representar una transaccion sql con procedimento almacenado

SqlCommand dataCommand = new SqlCommand("admContactoXBuscar", dataConnection);

 

dataCommand.CommandType = CommandType.StoredProcedure;

//creacion de los parametros de entrada del SP

SqlParameter _Nombres = new SqlParameter("@Nombres", SqlDbType.VarChar,100);

SqlParameter _Apellidos = new SqlParameter("@Apellidos", SqlDbType.VarChar, 100);

//se definen los parametros de entrada

_Nombres.Direction = ParameterDirection.Input;

_Apellidos.Direction = ParameterDirection.Input;

//asignar valores a los parametros de entrada por los digitados en los TextBox

_Nombres.Value = txtNombres.Text.Replace(‘á’, ‘a’).Replace(‘é’, ‘e’).Replace(‘í’, ‘i’).Replace(‘ó’, ‘o’).Replace(‘ú’, ‘u’).Replace(‘Á’, ‘a’).Replace(‘É’, ‘e’).Replace(‘Í’, ‘i’).Replace(‘Ó’, ‘o’).Replace(‘Ú’, ‘u’);

_Apellidos.Value = txtApellidos.Text.Replace(‘á’, ‘a’).Replace(‘é’, ‘e’).Replace(‘í’, ‘i’).Replace(‘ó’, ‘o’).Replace(‘ú’, ‘u’).Replace(‘Á’, ‘a’).Replace(‘É’, ‘e’).Replace(‘Í’, ‘i’).Replace(‘Ó’, ‘o’).Replace(‘Ú’, ‘u’);

//Adicionan los parametros al objecto Datacommand

dataCommand.Parameters.Add(_Nombres);

dataCommand.Parameters.Add(_Apellidos);

//abrior conexión

dataConnection.Open();

//ejecutar la lectura de datos

//SqlDataReader dataReader = dataCommand.ExecuteReader();

//objeto para poder adignar el resultado al DataTable

SqlDataAdapter da;

DataTable dt = new DataTable();

try

 

da = new SqlDataAdapter(dataCommand);

 da.Fill(dt);

//Lenar la grila de valores

this.GridView1.DataSource = dt;

this.GridView1.DataBind();

}

catch (Exception ex)

{

throw new Exception(ex.Message, ex);

}

}

About omaracostacasas

ING SOFTWARE
This entry was posted in SQL Server. Bookmark the permalink.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s