none
acesso a dados por storeProcedure com outputParameter - problema RRS feed

  • Pergunta

  • Ola pessoal, no fragmento de código abaixo, estou executando uma SP (de teste) que retorna o código de erro customizado no partametro OUTPUT @retErroNumero .
    Acontece que na instrução cmd.executeReader(), retotrna nothing nesse parâmetro?, porém substuindo por executeNonQuery, executeScalar, ou adapter.fill(ds) retorna o parametro output carregado. O problema só acontece com o executeReader, alguem poderia me dizer se esta instrução tem algo especiar?
    takeo 

    ESTA É A SP.
    set ANSI_NULLS ON
    set QUOTED_IDENTIFIER ON
    go
    ALTER PROCEDURE [dbo].[vddasp_selTesteA]
      ( 
       @testeID int,
       @retErroNumber int OUTPUT
      )
    As
    BEGIN TRY
      --  DECLARE @retErroNumber int
        DECLARE @retCod int
        DECLARE @retContador int
        SET NOCOUNT OFF
        SELECT @retCod = count(*)
         FROM  entidade
         WHERE entidadeCodigo = @testeId
         if @retCod = 0
            BEGIN
            RAISERROR(50101,14,2,'testea','testeb','testec')
       --   SELECT @retErroNumber =  ERROR_NUMBER()
            END
        SELECT testeID,
               testeNome
        FROM   tableA
        WHERE  testeID = @testeID
        SET @retContador = @@ROWCOUNT
        if  @retContador = 0
            BEGIN
            RAISERROR(50103,14,2)
         -- SELECT @retErroNumber =  ERROR_NUMBER()
            END
        END TRY
    BEGIN CATCH
        SET @retErroNumber = ERROR_NUMBER()
    END CATCH

    ESTA É A EXECUÇAO DA SP
        Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
            Dim strCon As String = "data source=maqtakeo;initial catalog=dbvdda;integrated security=true"
            Dim objcon As New SqlConnection(strCon)
            Dim strcmd As String = "vddasp_selTesteA"
            objcon.Open()
            Dim cmd As New SqlCommand(strcmd, objcon)
            cmd.CommandType = CommandType.StoredProcedure
            Dim p1 As New SqlParameter
            Dim adp As New SqlDataAdapter(cmd)
            Dim ds As New DataSet
            Try
                Dim p0 As New SqlParameter
                p0.ParameterName = "@testeID"
                p0.Value = 1
                p0.SqlDbType = SqlDbType.Int
                p0.SourceColumn = "testeId"
                cmd.Parameters.Add(p0)
                p1.ParameterName = "@retErroNumber"
                p1.Direction = ParameterDirection.Output
                p1.SqlDbType = SqlDbType.Int
                cmd.Parameters.Add(p1)
                '   cmd.ExecuteScalar()      FUNCIONA
                '    adp.Fill(ds, "tableA")     FUNCIONA
                ' cmd.ExecuteNonQuery() FUNCIONA
                cmd.ExecuteReader()      NÃO FUNCIONA

                If CInt(p1.Value) <> 0 Then
                    Err.Raise(CInt(p1.Value), "teste")
                End If
            Catch ex As Exception
                Select Case CInt(p1.Value)
                    Case 50103
                        MessageBox.Show("erro " & "50103")
                End Select
            Finally
                objcon.Close()
            End Try
        End Sub

    terça-feira, 1 de julho de 2008 20:04

Respostas

Todas as Respostas

  • Oi !

     

    ExecuteReader devolve para você um datareader.

     

    Você só vai conseguir ler o outputparameter depois que fizer um close no datareader devolvido.

     

    []'s

     

    Dennes

    http://www.bufaloinfo.com.br

    http://cidadaocarioca.blogspot.com

     

    quarta-feira, 2 de julho de 2008 12:00
  • Oi Dennes
    Valeu, cara, funcionou ...
    Por esses e outras que a experiência é fundamental. Ficaria muito tempo  matuando em cima desse problema até que alguma força divina me inspirasse a fazer isso ou talvez depois de muita pesquisa descobrir que no caso do executreReader só depois do close que iria obter tal informação.
    gratíssimo mais uma vez por me ajudar
    abraço
    takeo .
    quarta-feira, 2 de julho de 2008 22:31