none
COmo saber si un procedimiento almacenado se ejecuto o no RRS feed

  • Pregunta

  • Hola gente !

    He hecho infinidades de procedimientos almacenados, pero aun no se como idear la manera en que este en verdad me retorne lo que ejecuto y como administrarlo al nivel del codigo.

    Por ejemplo casi siempre yo hago lo siguiente:

    Comando.ExecuteNonQuery();

    Y esta ultima Instruccion me retorna filas afectadas, pero de todas formas yo por codigo tengo que saber cuantas filas se afectaron y en cierta forma tengo que poner valores quemados, por que muchas veces un procedimiento puede afectar entre 0 y n lineas dependiendo de lo que realice.

    Existe alguna forma en que uno pudiera saber que si un procedimiento realizo lo que debia de hacer?

    Gracias !

    martes, 20 de septiembre de 2011 16:49

Respuestas

  • Prodrias Postear el Procedimiento Almacenado?

    Tambien podrias hacer bool proc = Convert.ToBoolean(Comando.ExecuteNonQuery());

    if(proc)

       //Se ejecuto con exito

    else

       //Error

     


    Luis Y. Ramirez Software Developer "Recuerda marcar la repuesta como VALIDA si te ha ayudado"
    martes, 20 de septiembre de 2011 16:57
  • yo por codigo tengo que saber cuantas filas se afectaron

    has analizado la documentacion del ExecuteNonQuery(), cuando tienes este tipo de dudas recomiendo ir al msdn

    veras que la documentacion menciona que como retorno el metodo devuelve las filas afectadas

    int rowafected = Comando.ExecuteNonQuery();

    listo eso es todo, ahi obtienes el valor de la cantidad de registros que fueron afectado por la query que ejecutas

     

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    martes, 20 de septiembre de 2011 17:10
  • Hola Freddy,

    Existe alguna forma en que uno pudiera saber que si un procedimiento realizo lo que debia de hacer?

    La verdad que todo depende de las sentencias que ejecute ese procedimiento, tu piensa si yo ejecuto lo siguiente

    update tabla set campo = 1 where id > 10

    Aqui tu dices que modifique la columna campo a valor 1 para todas las filas cuyo id > 10, claro si no se cumple esta condición el numero de filas afectadas es 0 si se cumple puede ser que te de 1,100,1000, etc.

    Ahora saber que filas han sido modificadas se puede hacer pero yo no te lo recomiendo, puesto que no te queda otra alternativa que leer las filas cuyo id sea mayor que 10 y el valor de campo igual a 1 , pero ademas en la misma transación, puesto que si otro usuario interactua con el sistema estos datos puedes cambiar.

     

    Con lo cual la respuesta es no, lo único que puedes saber desde tu cliente  que filas han sido afectadas por la instrucción 

    ExecuteNonQuery().

    Aparte te comento una cosa no en todos los sistemas de BB.DD ExecuteNonQuery funciona correctamente, te hablo concretamente de DB2 donde ese comando no devolvía el numero de filas afectadas.


    No se si te refieres a eso  o a otro tipo de cosa :)

    Saludos.


    phurtado
    martes, 20 de septiembre de 2011 17:20
    Moderador
  • Hola

    Entonces para todos los casos cual seria las instruccion mas adecuada para saber el numero de filas afectadas ?

    Con un DataReader, DataSet, Cual ?

    Gracias

    int rowafected = (int)Comando.ExecuteNonQuery();

    MessageBox.Show(string.Format("{0} Filas Afectaras", rowafected.ToString()));


    Luis Y. Ramirez Software Developer "Recuerda marcar la repuesta como VALIDA si te ha ayudado"
    martes, 20 de septiembre de 2011 17:32

Todas las respuestas

  • Prodrias Postear el Procedimiento Almacenado?

    Tambien podrias hacer bool proc = Convert.ToBoolean(Comando.ExecuteNonQuery());

    if(proc)

       //Se ejecuto con exito

    else

       //Error

     


    Luis Y. Ramirez Software Developer "Recuerda marcar la repuesta como VALIDA si te ha ayudado"
    martes, 20 de septiembre de 2011 16:57
  • yo por codigo tengo que saber cuantas filas se afectaron

    has analizado la documentacion del ExecuteNonQuery(), cuando tienes este tipo de dudas recomiendo ir al msdn

    veras que la documentacion menciona que como retorno el metodo devuelve las filas afectadas

    int rowafected = Comando.ExecuteNonQuery();

    listo eso es todo, ahi obtienes el valor de la cantidad de registros que fueron afectado por la query que ejecutas

     

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    martes, 20 de septiembre de 2011 17:10
  • Hola

    Lo que pasa esque no tengo un procedimiento almacenado como estandarizado, y quisiera aplicar un estandar para ello.

    Estaba pensando en poner un parametro de retorno de tipo varchar que me capturara el error dentro de una instruccion SQL del procedimiento y si este parametro estava vacio, el procedimiento se ejecuto con exito, de lo contrario el procedimiento fallo en alguna parte de la instruccion del procedimiento.

     

    martes, 20 de septiembre de 2011 17:12
  • pero muestranos el codigo para ver lo que realizas en el y el procedimiento almacenado
    Luis Y. Ramirez Software Developer "Recuerda marcar la repuesta como VALIDA si te ha ayudado"
    martes, 20 de septiembre de 2011 17:20
  • Hola Freddy,

    Existe alguna forma en que uno pudiera saber que si un procedimiento realizo lo que debia de hacer?

    La verdad que todo depende de las sentencias que ejecute ese procedimiento, tu piensa si yo ejecuto lo siguiente

    update tabla set campo = 1 where id > 10

    Aqui tu dices que modifique la columna campo a valor 1 para todas las filas cuyo id > 10, claro si no se cumple esta condición el numero de filas afectadas es 0 si se cumple puede ser que te de 1,100,1000, etc.

    Ahora saber que filas han sido modificadas se puede hacer pero yo no te lo recomiendo, puesto que no te queda otra alternativa que leer las filas cuyo id sea mayor que 10 y el valor de campo igual a 1 , pero ademas en la misma transación, puesto que si otro usuario interactua con el sistema estos datos puedes cambiar.

     

    Con lo cual la respuesta es no, lo único que puedes saber desde tu cliente  que filas han sido afectadas por la instrucción 

    ExecuteNonQuery().

    Aparte te comento una cosa no en todos los sistemas de BB.DD ExecuteNonQuery funciona correctamente, te hablo concretamente de DB2 donde ese comando no devolvía el numero de filas afectadas.


    No se si te refieres a eso  o a otro tipo de cosa :)

    Saludos.


    phurtado
    martes, 20 de septiembre de 2011 17:20
    Moderador
  • Hola

    Entonces para todos los casos cual seria las instruccion mas adecuada para saber el numero de filas afectadas ?

    Con un DataReader, DataSet, Cual ?

    Gracias

    martes, 20 de septiembre de 2011 17:30
  • Hola

    Entonces para todos los casos cual seria las instruccion mas adecuada para saber el numero de filas afectadas ?

    Con un DataReader, DataSet, Cual ?

    Gracias

    int rowafected = (int)Comando.ExecuteNonQuery();

    MessageBox.Show(string.Format("{0} Filas Afectaras", rowafected.ToString()));


    Luis Y. Ramirez Software Developer "Recuerda marcar la repuesta como VALIDA si te ha ayudado"
    martes, 20 de septiembre de 2011 17:32