Consultas dinámicas

03/05/2007 - 11:05 por Fernando Alonso | Informe spam
Hola a todos:
Quiero realizar una query dinámica, es decir la claúsula where la genero en
tiempo de ejecución en base a la elección del usuario, pero no encuentro la
forma de modificar la select del tableadapter. Obviamente no me vale hacerlo
con parámetros, puesto que, a priori, no se cuales van a ser. El usuario
puede utilizar distintas combinaciones de condiciones, todas, ninguna,etc.

Preguntas similare

Leer las respuestas

#1 Jesús López
03/05/2007 - 15:34 | Informe spam
Los table adapters son bastante poco flexibles. Una solución a tu problema
sería utilizar un procedimiento almacenado que construyera la instrucción
select usando sql dinámico en vez de construirla en la aplicación.

Por ejemplo:

CREATE PROCEDURE [SearchCustomer]
@CompanyName nvarchar(40),
@City nvarchar(15),
@Country nvarchar(15)
AS
DECLARE @sql nvarchar(4000)
SET @sql N'SELECT CustomerID, CompanyName, ContactName, ContactTitle,
[Address], City, Region, PostalCode, Country, Phone, Fax
FROM dbo.Customers
WHERE 1=1'
IF @CompanyName IS NOT NULL
SET @sql = @sql + ' AND CompanyName LIKE @CompanyName + ''%'''
IF @City IS NOT NULL
SET @sql = @sql + ' AND City = @City'
IF @Country IS NOT NULL
SET @sql = @sql + ' AND Country = @Country'

EXEC sp_executesql
@sql,
N'@CompanyName nvarchar(40), @City nvarchar(15), @Country nvarchar(15)',
@CompanyName, @City, @Country

Si ejecutas:

exec SearchCustomer NULL, NULL, NULL

Te dará todos los clientes

Si ejecutas:

exec SearchCustomer N'S', NULL, N'USA'

Te dará todos los clientes de USA cuyo CompanyName empieze por S.

Saludos:

Jesús López



"Fernando Alonso" escribió en el
mensaje news:
Hola a todos:
Quiero realizar una query dinámica, es decir la claúsula where la genero
en
tiempo de ejecución en base a la elección del usuario, pero no encuentro
la
forma de modificar la select del tableadapter. Obviamente no me vale
hacerlo
con parámetros, puesto que, a priori, no se cuales van a ser. El usuario
puede utilizar distintas combinaciones de condiciones, todas, ninguna,etc.
Respuesta Responder a este mensaje
#2 Item
03/05/2007 - 18:35 | Informe spam
Implementar una SQL dinámicamente no es problema.

Cuando hablas de TableAdapter, no se a que te refieres.

Hay tres objetos básicos.

DataSet, DataAdapter y DataTable.

Tu puedes montar una SQL y pasarsela a un DataAdapter tantas veces como
quieras, asignarle el resultado a un DataSet y trabajar con él directamente
del dataSet o a través de un Datatable.

¿Que es exactamente lo que quieres hacer?

Explicate un poco mejor a ver si te he entendido o no.


"Fernando Alonso" escribió en el
mensaje news:
Hola a todos:
Quiero realizar una query dinámica, es decir la claúsula where la genero
en
tiempo de ejecución en base a la elección del usuario, pero no encuentro
la
forma de modificar la select del tableadapter. Obviamente no me vale
hacerlo
con parámetros, puesto que, a priori, no se cuales van a ser. El usuario
puede utilizar distintas combinaciones de condiciones, todas, ninguna,etc.
Respuesta Responder a este mensaje
#3 Jesús López
03/05/2007 - 19:37 | Informe spam
Los tableadapters son una especie de DataAdapters con tipo generados por el
diseñador de DataSets de Visual Studio 2005 para hacer más fácil construir
objetos de acceso a datos. El problema es que los tableadapters usan
privadamente un DataAdapter que no exponen de forma pública ni compartida
(shared) con lo que resulta difícil cambiar la instrucción select en tiempo
de ejecución.

Saludos:

Jesús López



"Item" escribió en el mensaje
news:
Implementar una SQL dinámicamente no es problema.

Cuando hablas de TableAdapter, no se a que te refieres.

Hay tres objetos básicos.

DataSet, DataAdapter y DataTable.

Tu puedes montar una SQL y pasarsela a un DataAdapter tantas veces como
quieras, asignarle el resultado a un DataSet y trabajar con él
directamente del dataSet o a través de un Datatable.

¿Que es exactamente lo que quieres hacer?

Explicate un poco mejor a ver si te he entendido o no.


"Fernando Alonso" escribió en
el mensaje news:
Hola a todos:
Quiero realizar una query dinámica, es decir la claúsula where la genero
en
tiempo de ejecución en base a la elección del usuario, pero no encuentro
la
forma de modificar la select del tableadapter. Obviamente no me vale
hacerlo
con parámetros, puesto que, a priori, no se cuales van a ser. El usuario
puede utilizar distintas combinaciones de condiciones, todas,
ninguna,etc.




Respuesta Responder a este mensaje
#4 Item
03/05/2007 - 20:01 | Informe spam
Ya, la diferencia está en que yo utilizo NET 2003.

Ahí ya no te puedo ayudar. Yo plantearía lo que te he dicho, DataAdapter al
que le vas pasando las SQL a placer. Pero hasta Visual Studio 2005 no he
llegado.

A mi siempre me ha gustado llevar las riendas de lo que hago y no dejar,
como es tu caso, parte del trabajo a "objetos" que no me dejen claro lo que
hacen y limitan mis posibilidades (aunque bien gestionados faciliten el
trabajo). Todo es cuestión de aprender, claro está, pero la experiencia me
dicta esto.

Suerte.

"Jesús López" escribió en el mensaje
news:
Los tableadapters son una especie de DataAdapters con tipo generados por
el diseñador de DataSets de Visual Studio 2005 para hacer más fácil
construir objetos de acceso a datos. El problema es que los tableadapters
usan privadamente un DataAdapter que no exponen de forma pública ni
compartida (shared) con lo que resulta difícil cambiar la instrucción
select en tiempo de ejecución.

Saludos:

Jesús López



"Item" escribió en el mensaje
news:
Implementar una SQL dinámicamente no es problema.

Cuando hablas de TableAdapter, no se a que te refieres.

Hay tres objetos básicos.

DataSet, DataAdapter y DataTable.

Tu puedes montar una SQL y pasarsela a un DataAdapter tantas veces como
quieras, asignarle el resultado a un DataSet y trabajar con él
directamente del dataSet o a través de un Datatable.

¿Que es exactamente lo que quieres hacer?

Explicate un poco mejor a ver si te he entendido o no.


"Fernando Alonso" escribió en
el mensaje news:
Hola a todos:
Quiero realizar una query dinámica, es decir la claúsula where la genero
en
tiempo de ejecución en base a la elección del usuario, pero no encuentro
la
forma de modificar la select del tableadapter. Obviamente no me vale
hacerlo
con parámetros, puesto que, a priori, no se cuales van a ser. El usuario
puede utilizar distintas combinaciones de condiciones, todas,
ninguna,etc.








Respuesta Responder a este mensaje
#5 Norberto Kelijman
29/07/2007 - 00:19 | Informe spam
Mira aquí:

Dynamic Search Conditions in T-SQL
http://www.sommarskog.se/dyn-search.html
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida