Triggers, datasets y updates de dataadapters

18/12/2006 - 12:22 por Juan Diego Bueno | Informe spam
Hola gente:

Os comento. Yo normalmente para añadir un nuevo registro a una BD utilizo un
dataset con la tabla que necesito (que suele estar vacío, ya que la consulta
select devuelve los registros que cumplan con la clave principal, que en este
caso, sería nueva). Luego actualizo con update sobre el dataadapter. Por
otra parte, tengo un dataset tipado con la tabla en cuestión.



El tema es que tengo un trigger de inserción y actualización que funciona
perfectamente... siempre que haga la operación con un comando SQL contra el
servidor, mientras que el update del dataset sencillamente pasa del trigger y
coloca el registro ignorando las restricciones que le marco (no me refiero al
dataset, que puede tener tranquilamente ese registro, sino al actualizar los
cambios del dataset a la BD)

Evidentemente, tiene fácil solución si uso un procedimiento almacenado de
inserción, pero... no entiendo por qué hace esto, ya que tanto los
insertcommand como updatecommand son comandos SQL que se lanzan contra el
servidor.

Saludos

Preguntas similare

Leer las respuestas

#1 Juan Diego Bueno
18/12/2006 - 12:24 | Informe spam
Perdón: Ignoro por que ha hecho esto de postearmelo tres veces

Lo siento

Juan Diego Bueno ha escrito:

Hola gente:

Os comento. Yo normalmente para añadir un nuevo registro a una BD utilizo un
dataset con la tabla que necesito (que suele estar vacío, ya que la consulta
select devuelve los registros que cumplan con la clave principal, que en este
caso, sería nueva). Luego actualizo con update sobre el dataadapter. Por
otra parte, tengo un dataset tipado con la tabla en cuestión.



El tema es que tengo un trigger de inserción y actualización que funciona
perfectamente... siempre que haga la operación con un comando SQL contra el
servidor, mientras que el update del dataset sencillamente pasa del trigger y
coloca el registro ignorando las restricciones que le marco (no me refiero al
dataset, que puede tener tranquilamente ese registro, sino al actualizar los
cambios del dataset a la BD)

Evidentemente, tiene fácil solución si uso un procedimiento almacenado de
inserción, pero... no entiendo por qué hace esto, ya que tanto los
insertcommand como updatecommand son comandos SQL que se lanzan contra el
servidor.

Saludos
Respuesta Responder a este mensaje
#2 Alberto Poblacion
18/12/2006 - 13:39 | Informe spam
"Juan Diego Bueno" <Juan Diego wrote in
message news:
[...]
tengo un trigger de inserción y actualización que funciona
perfectamente...
[...] mientras que el update del dataset sencillamente pasa del trigger y
coloca el registro ignorando las restricciones que le marco



No tiene ningún sentido, el Update del Dataset simlemente envía al
servidor la sentencia, y los triggers tendrían que dispararse con toda
normalidad. Por algún sitio tiene que estar ocurriendo algo raro. Prueba a
capturar las sentencias que llegan al servidor usando el Sql Server Profiler
(si es un SQL Server), y prueba a ejecutar las sentencias capturadas desde
el analizador de consultas, a ver si te da alguna pista de qué puede estar
pasando.
Idea: ¿Puede ser que los triggers estén creados en una base de datos y
que estés ejecutando el programa contra otra distinta, que no tenga los
triggers?
Respuesta Responder a este mensaje
#3 Juan Diego Bueno
18/12/2006 - 13:47 | Informe spam
No, es sobre esa base de datos, sin ninguna duda. Voy a probar lo del
profiler, pero antes.. conviene que haga una aclaración, que puede ser
clave en esto

Realmente el trigger si se ejecuta... pero ignora un rollback tran que
tira para atrás la inserción (eso cuando lo hago desde el programa),
mientras que si hago la inserción con un INSERT directamente, como os
comentaba, si realiza el rollback. Después de la parte en la que
condicionalmente se ejecuta o no el rollback, hay unos updates sobre la
tabla que actualizan unos campos calculados, y esos si los hace
(mientras no vulneren la integridad referencial de los datos), los que
no hace son los que chocan con un check, con lo cual... corrijo, no es
que no ejecute el trigger, es que pasa esa parte (la que hace el
rollback)

Espero que me hayas entendido la verborrea :)

Saludos


On 18 dic, 13:39, "Alberto Poblacion"
wrote:
"Juan Diego Bueno" <Juan Diego wrote in
messagenews:

> [...]
> tengo un trigger de inserción y actualización que funciona
> perfectamente...
> [...] mientras que el update del dataset sencillamente pasa del trigger y
> coloca el registro ignorando las restricciones que le marco No tiene ningún sentido, el Update del Dataset simlemente envía al
servidor la sentencia, y los triggers tendrían que dispararse con toda
normalidad. Por algún sitio tiene que estar ocurriendo algo raro. Prueba a
capturar las sentencias que llegan al servidor usando el Sql Server Profiler
(si es un SQL Server), y prueba a ejecutar las sentencias capturadas desde
el analizador de consultas, a ver si te da alguna pista de qué puede estar
pasando.
Idea: ¿Puede ser que los triggers estén creados en una base de datos y
que estés ejecutando el programa contra otra distinta, que no tenga los
triggers?
Respuesta Responder a este mensaje
#4 Alberto Poblacion
18/12/2006 - 21:31 | Informe spam
"Juan Diego Bueno" wrote in message
news:
[...] no es
que no ejecute el trigger, es que pasa esa parte (la que hace el
rollback)



Pues sigo pensando que tiene que estar pasando algo raro por algún sitio,
ya que para el servidor son sentencias que le llegan para ejecutar y en
principio le da igual que vengan del analizador de consultas o de un
programa tuyo. Puede ser que la diferencia venga por alguna de las opciones
establecidas sobre la conexión (por ejemplo, el set xact_abort, o el set
implicit_transactions), que tenga diferente valor según que ejecutes la
sentencia de inserción directamente en el Query Analyzer o en tu programa, y
por eso el trigger se comporte de manera distinta. Ya sé que es dar palos de
ciego, pero no se me ocurre otra justificación del distinto comportamiento
en ambos casos.
Respuesta Responder a este mensaje
#5 Alhambra-Eidos
19/12/2006 - 08:17 | Informe spam
Puede usted aportar el código del trigger y el código C# que tienes para
realizar el Update ?
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida