Condiciones de búsqueda

25/07/2005 - 14:36 por mm | Informe spam
Con qué objeto consideráis que se haría mejor una búsqueda de determinado/s
registros según una serie de condiciones de búsqueda. Supondo que con
DataGrid, pero existe algo mejor? Por otro lado cuando hago búsquedas según
diferentes criterios me obliga a crear un DataAdapter por cada búsqueda
porque si no la sintaxis (interrogaciones) del SQL varia dependiendo de si es
una o 2 o más condiciones, es decir dependiendo de lo que el usuario
complete. Supongo que habrá alguna forma más limpia que si hay 4 criterios de
búsqueda tenga que poner 16 probabilidades distintas. Un saludo.

Preguntas similare

Leer las respuestas

#1 Julio Casal
26/07/2005 - 04:01 | Informe spam
Hola mm. Pues sí, de ley necesitarás un datagrid para mostrar los resultados
de las búsquedas. El grid nativo de .Net te lo recomendaría solo para
aplicaciones relativamente básicas. Pero si lo que vas a hacer es más
complicado o si deseas brindar a tus usuarios una funcionalidad mucho más
amigable, pues te recomiendo consideres conseguir grids de terceros, como el
de Infragistics, el de ComponentOne ó el XCeed. Esos son solo unos de los más
conocidos y más usados.

Con respecto a tu pregunta sobre el paso de parámetros, pues te diré que no
es realmente difícl hacer tu búsqueda con un solo query. Para empezar, podría
empezar escribiendo un procedure como el siguiente:

CREATE PROCEDURE [dbo].[USP_ClientesTraer]
@IdCliente [decimal](6, 0) = NULL,
@Nombre [varchar](70) = NULL,
@TipoIdentificacion [char](1) = NULL,
@CodigoIdentificacion [varchar](13) = NULL,
@IdGrupo [char](5) = NULL
AS
SELECT IdCliente, Nombre, TipoIdentificacion, CodigoIdentificacion, IdGrupo
FROM dbo.TB_Clientes
WHERE (@IdCliente IS NULL OR IdCliente = @IdCliente) AND
(@Nombre IS NULL OR Nombre LIKE '%' + @Nombre + '%') AND
(@TipoIdentificacion IS NULL OR TipoIdentificacion LIKE '%' +
@TipoIdentificacion + '%' ) AND
(@CodigoIdentificacion IS NULL OR CodigoIdentificacion LIKE '%' +
@CodigoIdentificacion + '%') AND
(@IdGrupo IS NULL OR IdGrupo LIKE '%' + @IdGrupo + '%')

Como puedes observar, allí se reciben cinco parámetros y el procedure lo que
hace es filtrar por cualquiera de esos parámetros siempre y cuando no haya
venido en NULL. Así, todos los parámetros que no vengan en NULL serán
considerados para hacer el filtro. Teniendo ese procedure, ya el asunto en
.Net es fácil, solo prepara un SQLCommand que incluya todos esos parámetros,
asígnales valor (los que tengan valor, los demás déjalos en NULL) y ejecuta
el query.

Espero haber podido ayudarte amigo.

Saludos.

Julio Casal
.Net Solution Developer
MCAD
Grupo Lebed


"mm" wrote:

Con qué objeto consideráis que se haría mejor una búsqueda de determinado/s
registros según una serie de condiciones de búsqueda. Supondo que con
DataGrid, pero existe algo mejor? Por otro lado cuando hago búsquedas según
diferentes criterios me obliga a crear un DataAdapter por cada búsqueda
porque si no la sintaxis (interrogaciones) del SQL varia dependiendo de si es
una o 2 o más condiciones, es decir dependiendo de lo que el usuario
complete. Supongo que habrá alguna forma más limpia que si hay 4 criterios de
búsqueda tenga que poner 16 probabilidades distintas. Un saludo.
Respuesta Responder a este mensaje
#2 mm
26/07/2005 - 10:14 | Informe spam
Muchas gracias, Julio, voy a intentarlo despacito. Un saludo.

"Julio Casal" escribió:

Hola mm. Pues sí, de ley necesitarás un datagrid para mostrar los resultados
de las búsquedas. El grid nativo de .Net te lo recomendaría solo para
aplicaciones relativamente básicas. Pero si lo que vas a hacer es más
complicado o si deseas brindar a tus usuarios una funcionalidad mucho más
amigable, pues te recomiendo consideres conseguir grids de terceros, como el
de Infragistics, el de ComponentOne ó el XCeed. Esos son solo unos de los más
conocidos y más usados.

Con respecto a tu pregunta sobre el paso de parámetros, pues te diré que no
es realmente difícl hacer tu búsqueda con un solo query. Para empezar, podría
empezar escribiendo un procedure como el siguiente:

CREATE PROCEDURE [dbo].[USP_ClientesTraer]
@IdCliente [decimal](6, 0) = NULL,
@Nombre [varchar](70) = NULL,
@TipoIdentificacion [char](1) = NULL,
@CodigoIdentificacion [varchar](13) = NULL,
@IdGrupo [char](5) = NULL
AS
SELECT IdCliente, Nombre, TipoIdentificacion, CodigoIdentificacion, IdGrupo
FROM dbo.TB_Clientes
WHERE (@IdCliente IS NULL OR IdCliente = @IdCliente) AND
(@Nombre IS NULL OR Nombre LIKE '%' + @Nombre + '%') AND
(@TipoIdentificacion IS NULL OR TipoIdentificacion LIKE '%' +
@TipoIdentificacion + '%' ) AND
(@CodigoIdentificacion IS NULL OR CodigoIdentificacion LIKE '%' +
@CodigoIdentificacion + '%') AND
(@IdGrupo IS NULL OR IdGrupo LIKE '%' + @IdGrupo + '%')

Como puedes observar, allí se reciben cinco parámetros y el procedure lo que
hace es filtrar por cualquiera de esos parámetros siempre y cuando no haya
venido en NULL. Así, todos los parámetros que no vengan en NULL serán
considerados para hacer el filtro. Teniendo ese procedure, ya el asunto en
.Net es fácil, solo prepara un SQLCommand que incluya todos esos parámetros,
asígnales valor (los que tengan valor, los demás déjalos en NULL) y ejecuta
el query.

Espero haber podido ayudarte amigo.

Saludos.

Julio Casal
.Net Solution Developer
MCAD
Grupo Lebed


"mm" wrote:

> Con qué objeto consideráis que se haría mejor una búsqueda de determinado/s
> registros según una serie de condiciones de búsqueda. Supondo que con
> DataGrid, pero existe algo mejor? Por otro lado cuando hago búsquedas según
> diferentes criterios me obliga a crear un DataAdapter por cada búsqueda
> porque si no la sintaxis (interrogaciones) del SQL varia dependiendo de si es
> una o 2 o más condiciones, es decir dependiendo de lo que el usuario
> complete. Supongo que habrá alguna forma más limpia que si hay 4 criterios de
> búsqueda tenga que poner 16 probabilidades distintas. Un saludo.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida