LinQ y actualizacion a SQL Server

04/10/2007 - 16:18 por Jose Luis | Informe spam
Disculpen las preguntas reiteradas sobre LinQ en este foro pero es que
estado buscando otro newsgroup en español y no lo he encontrado.

Empece a hacer pruebas del linq de Orcas beta2 con SQL Server 2000 leyendo
una tablita y actualizando una columna de tres columnas, siendo la primera
columna su clave primaria. Me la lee y actualiza muy bien pero la inquietud
es que en el SQL Profiler (herramienta para visualizar los comandos que
'recibe' el servidor) veo que los comandos que recibe desde LinQ son a
traves del procedimiento del servidor "sp_executesql", es decir SQL
dinamico!.

En SQL Server siempre se nos dice que evitemos el SQL dinamico por su
ineficiencia e inseguridad. La pregunta es si LinQ siempre ejecutará sql
dinámico hacia el servidor SQL o hay alguna manera de configurarlo para que
no postee sql dinámico sino instrucciones directas?


La otra cosa extraña que vi fue a pesar de la tablita tener su clave
primaria (campo 'estado'), un update (SubmitChanges) de una fila para
actualizar el campo 'nombre' me puso en el WHERE del Update una comparacion
para todos los campos de la tabla, cuando solo bastaba con preguntar por la
clave primaria.

Me podrian explicar al respecto?


Jose Luis

Preguntas similare

Leer las respuestas

#1 Pedro C
04/10/2007 - 18:35 | Informe spam
Sobre el sp_executesql tengo entendido que eso lo hacen todos los lenguajes
cuando los comandos que se envian a sql server tienen que evaluar los
parametros.
Si no tienen que evaluar parametros o sea que se le mandan literales o
constantes, entonces las consultas pasan directas.


"Jose Luis" <x> wrote in message
news:%
Disculpen las preguntas reiteradas sobre LinQ en este foro pero es que
estado buscando otro newsgroup en español y no lo he encontrado.

Empece a hacer pruebas del linq de Orcas beta2 con SQL Server 2000 leyendo
una tablita y actualizando una columna de tres columnas, siendo la primera
columna su clave primaria. Me la lee y actualiza muy bien pero la
inquietud es que en el SQL Profiler (herramienta para visualizar los
comandos que 'recibe' el servidor) veo que los comandos que recibe desde
LinQ son a traves del procedimiento del servidor "sp_executesql", es decir
SQL dinamico!.

En SQL Server siempre se nos dice que evitemos el SQL dinamico por su
ineficiencia e inseguridad. La pregunta es si LinQ siempre ejecutará sql
dinámico hacia el servidor SQL o hay alguna manera de configurarlo para
que no postee sql dinámico sino instrucciones directas?


La otra cosa extraña que vi fue a pesar de la tablita tener su clave
primaria (campo 'estado'), un update (SubmitChanges) de una fila para
actualizar el campo 'nombre' me puso en el WHERE del Update una
comparacion para todos los campos de la tabla, cuando solo bastaba con
preguntar por la clave primaria.

Me podrian explicar al respecto?


Jose Luis

Respuesta Responder a este mensaje
#2 Alfredo Novoa
04/10/2007 - 18:36 | Informe spam
On Thu, 4 Oct 2007 10:18:59 -0400, "Jose Luis" <x> wrote:

'recibe' el servidor) veo que los comandos que recibe desde LinQ son a
traves del procedimiento del servidor "sp_executesql", es decir SQL
dinamico!.



¡Claro!

En SQL Server siempre se nos dice que evitemos el SQL dinamico por su
ineficiencia e inseguridad.



Bueno, ahora dirán que ya no hay que evitarlo.

La otra cosa extraña que vi fue a pesar de la tablita tener su clave
primaria (campo 'estado'), un update (SubmitChanges) de una fila para
actualizar el campo 'nombre' me puso en el WHERE del Update una comparacion
para todos los campos de la tabla, cuando solo bastaba con preguntar por la
clave primaria.

Me podrian explicar al respecto?



Habrán hecho una chapuza.


Saludos
Respuesta Responder a este mensaje
#3 Jose Luis
04/10/2007 - 18:51 | Informe spam
Buen dato ese.

De hecho probe de la forma tradicional con un Command plano sin parametros:
"update estado set nombre='otro' where estado='2' " y ciertamente en el
profiler lo veo que se envio directamente sin usar el sp_executesql, pero
con Linq no veo como lograrlo.

Gracias.

Jose Luis


"Pedro C" wrote in message
news:%
Sobre el sp_executesql tengo entendido que eso lo hacen todos los
lenguajes cuando los comandos que se envian a sql server tienen que
evaluar los parametros.
Si no tienen que evaluar parametros o sea que se le mandan literales o
constantes, entonces las consultas pasan directas.


"Jose Luis" <x> wrote in message
news:%
Disculpen las preguntas reiteradas sobre LinQ en este foro pero es que
estado buscando otro newsgroup en español y no lo he encontrado.

Empece a hacer pruebas del linq de Orcas beta2 con SQL Server 2000
leyendo una tablita y actualizando una columna de tres columnas, siendo
la primera columna su clave primaria. Me la lee y actualiza muy bien
pero la inquietud es que en el SQL Profiler (herramienta para visualizar
los comandos que 'recibe' el servidor) veo que los comandos que recibe
desde LinQ son a traves del procedimiento del servidor "sp_executesql",
es decir SQL dinamico!.

En SQL Server siempre se nos dice que evitemos el SQL dinamico por su
ineficiencia e inseguridad. La pregunta es si LinQ siempre ejecutará sql
dinámico hacia el servidor SQL o hay alguna manera de configurarlo para
que no postee sql dinámico sino instrucciones directas?


La otra cosa extraña que vi fue a pesar de la tablita tener su clave
primaria (campo 'estado'), un update (SubmitChanges) de una fila para
actualizar el campo 'nombre' me puso en el WHERE del Update una
comparacion para todos los campos de la tabla, cuando solo bastaba con
preguntar por la clave primaria.

Me podrian explicar al respecto?


Jose Luis





Respuesta Responder a este mensaje
#4 Jose Luis
04/10/2007 - 18:59 | Informe spam
Hola,


'recibe' el servidor) veo que los comandos que recibe desde LinQ son a
traves del procedimiento del servidor "sp_executesql", es decir SQL
dinamico!.



¡Claro!




No lo veía tan obvio pues pienso que podrian haber optimizado el comando
antes de enviarlo al servidor para evitar el uso del sp_executesql.
Como me dijo Pedro C, ya vi que si uno manda un comando (no Linq) plano sin
ningun parametro para evaluar ciertamente lo manda directamente (sin sql
dinamico). Creo que ellos debieron haber pensado en eso.


En SQL Server siempre se nos dice que evitemos el SQL dinamico por su
ineficiencia e inseguridad.



Bueno, ahora dirán que ya no hay que evitarlo.




Jejejej no lo dudo.


La otra cosa extraña que vi fue a pesar de la tablita tener su clave
primaria (campo 'estado'), un update (SubmitChanges) de una fila para
actualizar el campo 'nombre' me puso en el WHERE del Update una
comparacion
para todos los campos de la tabla, cuando solo bastaba con preguntar por
la
clave primaria.

Me podrian explicar al respecto?



Habrán hecho una chapuza.




Hasta prueba en contrario o que eso se pueda configurar de alguna manera mas
eficiente, tambien me parece una chapuza.
Seguire chequeando a ver si se puede.

Saludos

Jose Luis
Respuesta Responder a este mensaje
#5 Alfredo Novoa
04/10/2007 - 19:16 | Informe spam
On Thu, 4 Oct 2007 12:51:58 -0400, "Jose Luis" <x> wrote:

De hecho probe de la forma tradicional con un Command plano sin parametros:
"update estado set nombre='otro' where estado='2' " y ciertamente en el
profiler lo veo que se envio directamente sin usar el sp_executesql,



¿Y como lo envía directamente?

Yo pensaba que o mandabas SQL dinámico o ejecutabas un procedimiento
almacenado.


Saludos
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida