none
Como recoger un dato pasado de un stored procedure RRS feed

  • Pregunta

  • Hola a todos, estoy intentado pasar un único dato de un stored procedure a m código ASP.net, prefiero no complicarme con parametros de entrada y salida, mi pregunta es si puede hacer esto.

     

    Dim NumBonosLibres As Integer

    NumBonosLibres = comandoContarBono.ExecuteScalar

     

    If NumBonosLibres > 0 Then

     

    Else

     

    End If

    El comando llama a un procediento que tiene un RETURN <valor> que me devuelve un entero.

    Me suena haberlo hecho antes pero no recuedo si era executenonquery, executeescalar, etc....

    Bueno muchas gracias a todos.

     

    martes, 11 de mayo de 2010 16:27

Respuestas

  • Tienes dos posibilidades: puedes agregar un parámetro del tipo "Return"
    (en este link tienes un ejemplo:
    http://msdn.microsoft.com/en-us/library/59x02y99(VS.71).aspx) o cambias el
    RETURN de tu procedimiento por un "SELECT @Valor" y entonces si puedes
    utilizar el ExecuteScalar.
    Suerte!
     
     

    Para el correcto funcionamiento y que otros usuarios se puedan beneficiar de la solucion de esta pregunta por favor marca las respuestas que te hayan ayudado como "Respuesta".
    Si la respuesta te ha sido útil por favor Vótala.

    Gustavo A. Cantero
    Scientia® Soluciones Informáticas
    MCP - MCSD - MCTS - MCPD
    http://www.scientia.com.ar
    http://www.programandoamedianoche.com
    http://foro.scientia.com.ar
    martes, 11 de mayo de 2010 17:07

Todas las respuestas

  • Esto es más de programación que de SQL Server. Te recomiendo que preguntes en un foro de .NET, te podrán contestar mejor. Por mi parte, te recomiendo el uso de parámetros de salida. Al fin y al cabo, el valor de retorno de la ejecución de un procedimiento no es más que un tipo de parámetro de salida para indicar justamente eso: cómo finalizó dicho procedimiento. Lo que tú intentas es usarlo para un fin distinto para el que se pensó.
    martes, 11 de mayo de 2010 16:39
  • además de suscribir totalmente la opinión de carlos, te digo que los parámetros de salida son triviales, haz lo mismo que haces, pero en la propiedad direction usa input-ouput y al crear tu procedimiento almacenado, ponle al lado output y asunto resuelto

     

    Create proc pepe @a int output

    as

    begin

     bla bla 

    set @a = 7

    end

    Y en .NET es del objeto parameters, la propiedad Direction, ahí te sale un enumereado... lo ves fácil


    Comparte lo que sepas, aprende lo que no sepas (FGG)
    martes, 11 de mayo de 2010 16:54
    Moderador
  • Tienes dos posibilidades: puedes agregar un parámetro del tipo "Return"
    (en este link tienes un ejemplo:
    http://msdn.microsoft.com/en-us/library/59x02y99(VS.71).aspx) o cambias el
    RETURN de tu procedimiento por un "SELECT @Valor" y entonces si puedes
    utilizar el ExecuteScalar.
    Suerte!
     
     

    Para el correcto funcionamiento y que otros usuarios se puedan beneficiar de la solucion de esta pregunta por favor marca las respuestas que te hayan ayudado como "Respuesta".
    Si la respuesta te ha sido útil por favor Vótala.

    Gustavo A. Cantero
    Scientia® Soluciones Informáticas
    MCP - MCSD - MCTS - MCPD
    http://www.scientia.com.ar
    http://www.programandoamedianoche.com
    http://foro.scientia.com.ar
    martes, 11 de mayo de 2010 17:07
  • Si quieres recibir el resultado de esa manera (con un ExecuteScalar), basta con que conviertas el procedimiento en una función escalar (CREATE FUNCTION...) y devuelvas el resultado en el RETURN de la función. De esa manera te funciona todo y no requiere parámetros. Ah, tiene una pequeña pega: en el SqlCommand hay que poner el nombre de la función precedido del esquema, no te toma el esquema predeterminado del usuario. Por ejemplo hay que poner "dbo.Mifuncion" en lugar de sólo "MiFuncion".

     

    martes, 11 de mayo de 2010 18:50
  • muchas gracias a todos, lo que buscaba lo he solucionado con

    SELECT @Dato

    RETURN @Dato

    Aunque entiendo todos los comentarios que me habeis dado.

    Muchas gracias

    martes, 11 de mayo de 2010 21:11