none
Retornar mensagem de erro da Procedure RRS feed

  • Pergunta

  • Tenho uma procedure e preciso que o  Raiserro seja retornado para aplicação no momento da execução, vejam a procedure abaixo:

    CREATE PROCEDURE [dbo].[Title_Update]
        @TitleID [int],
        @Description [nvarchar](max)
    AS

    IF EXISTS(SELECT Description FROM Titles WHERE Description = @Description)
        BEGIN
            RAISERROR('This Title already exists, please inform a new one.', 16, 1)
        END
        ELSE
    BEGIN
        UPDATE [dbo].[Titles]
        SET [Description] = @Description
        WHERE ([TitleID] = @TitleID)
    END

    Este é o codigo da aplicação

        try
                {
                    if (ModelState.IsValid)
                    {
                        db.Titles.Add(title);
                        db.SaveChanges();
                        return RedirectToAction("Index");
                    }
                }

                catch(Exception ex)
                {

                    O QUE DEVO UTILIZAR DE CODIGO AKI??!?

                 }

                return View(title);
            }

    Alguem saber o o que devo colocar no Catch para que funcione?!

    Muito obrigado

    sexta-feira, 23 de outubro de 2015 14:53

Respostas

  • André,

    Se você precisa apenas mostrar a mensagem de erro exibida pela sua procedure, então basta utilizar a propriedade "Message" (e se necessário, concatenar com outras informações recebidas pelo erro).

    Segue abaixo um exemplo de sintaxe para você adaptar à sua necessidade:

    catch(Exception ex)
    {
          return ("Erro: " + ex.Message);
    }


    Para maiores informações veja:

    https://msdn.microsoft.com/pt-br/library/0yd65esw.aspx

    https://msdn.microsoft.com/pt-br/library/system.exception.aspx


    Se ajudou na sua solução, não esqueça de marcar como resposta !


    Abraços,

    Durval Ramos
    Microsoft Partner | MTA | MCSA - SQL Server 2012 | MCSE - Data Platform
    ----------------------------------
    Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"

    • Sugerido como Resposta Logan Destefani Merazzi sexta-feira, 23 de outubro de 2015 15:55
    • Marcado como Resposta Marcos SJ sexta-feira, 23 de outubro de 2015 15:56
    sexta-feira, 23 de outubro de 2015 15:37
    Moderador

Todas as Respostas

  • Eu uso um modelo de procedure assim:

    USE Banco
    GO
    
    IF EXISTS (	SELECT TOP 1 1 
    			FROM SYS.OBJECTS
    			WHERE OBJECT_ID = OBJECT_ID(N'[dbo].[#NOME_PROCEDURE]') AND TYPE IN (N'P', N'PC'))
    	DROP PROCEDURE [dbo].[#NOME_PROCEDURE]
    GO
    
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    /*
    +--------------------------------------------------------------------------
    | Procedure...: NOME_PROCEDURE
    | Descrição...: DESCRIÇÃO
    | Dt. Criação.: DATA
    | Responsável.: ANALISTA
    +--------------------------------------------------------------------------
    */
    
    CREATE PROCEDURE [dbo].[#NOME_PROCEDURE]
    (
    	#PARAMETROS_ENTRADA_SAIDA
    )
    AS
    BEGIN TRY
    	BEGIN TRANSACTION
    
    	SET NOCOUNT ON
    
    	DECLARE
    		@mensagem_erro			VARCHAR(250)
    
    	/*
    	#CONDIÇÕES DE EXECUÇÃO DA PROCEDURE
    	IF ()
    	BEGIN
    		SELECT @mensagem_erro = '#MENSAGEM DE ERRO'
    		ROLLBACK TRANSACTION
    		RAISERROR (@mensagem_erro, 16, 1)
    		RETURN
    	END
    	*/
    
    	--#CONTEÚDO DA PROCEDURE
    
    	IF (@@TRANCOUNT > 0) COMMIT TRANSACTION
    
    	SET NOCOUNT OFF
    END TRY
    
    BEGIN CATCH
    	IF (@@TRANCOUNT > 0) ROLLBACK TRANSACTION
    
    	SELECT @mensagem_erro = Error_Message()
    	RAISERROR (@mensagem_erro, 16, 1)
    	RETURN
    END CATCH
    GO
    
    GRANT EXECUTE ON [dbo].[#NOME_PROCEDURE] TO UsuImesc
    GO

    sexta-feira, 23 de outubro de 2015 15:02
  • André,

    Se você precisa apenas mostrar a mensagem de erro exibida pela sua procedure, então basta utilizar a propriedade "Message" (e se necessário, concatenar com outras informações recebidas pelo erro).

    Segue abaixo um exemplo de sintaxe para você adaptar à sua necessidade:

    catch(Exception ex)
    {
          return ("Erro: " + ex.Message);
    }


    Para maiores informações veja:

    https://msdn.microsoft.com/pt-br/library/0yd65esw.aspx

    https://msdn.microsoft.com/pt-br/library/system.exception.aspx


    Se ajudou na sua solução, não esqueça de marcar como resposta !


    Abraços,

    Durval Ramos
    Microsoft Partner | MTA | MCSA - SQL Server 2012 | MCSE - Data Platform
    ----------------------------------
    Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"

    • Sugerido como Resposta Logan Destefani Merazzi sexta-feira, 23 de outubro de 2015 15:55
    • Marcado como Resposta Marcos SJ sexta-feira, 23 de outubro de 2015 15:56
    sexta-feira, 23 de outubro de 2015 15:37
    Moderador
  • Boa tarde!

    Durval infelizmente eu ja tentei com essa sintaxe, mais eu nao sei porque nao copila, :(

    Este é meu primeiro projeto em MVC5 e tenho quase nada de exp, tenho certeza que pra vocês isso é ridculo mas esta se complicando pra mim. rsrs

    Este é o erro que eu recebo ao tentar Copilar o prejeto depois de adicionar o codigo a baixo:


      catch (Exception ex)
                {
                    return ("Erro: " + ex.Message);
                }


    Error    CS0029    Cannot implicitly convert type 'string' to 'System.Web.Mvc.ActionResult' 

    alguma sugestão?? att

    sexta-feira, 23 de outubro de 2015 16:58
  • O erro não é do banco !!!! É erro do C#
    Vc está passando uma String em uma variável que espera um "System.Web.Mvc.ActionResult".

    Erro do Compilador CS0029



    Flávio Farias
    "May the Force be with you"
    Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"

    sexta-feira, 23 de outubro de 2015 17:43
  • Desculpe minha ignorancia, más voce sabe como converter isso?

    att

    sexta-feira, 23 de outubro de 2015 18:05
  • Desculpe minha ignorancia, más voce sabe como converter isso?

    att

    André,

    Utilize o método "View" do assembly "System.Web.Mvc" para complementar seu retorno. Segue abaixo um trecho de código para você adaptar à sua necessidade:

    ViewData["Erro"] = "Erro: " + ex.Exception;
    
    return View();

    Segue abaixo uma documentação com um exemplo sobre este retorno:

    https://msdn.microsoft.com/pt-br/library/dd410269%28v=vs.100%29.aspx

    Para maiores informações veja:

    https://msdn.microsoft.com/pt-br/library/system.web.mvc.actionresult(v=vs.118).aspx

    https://msdn.microsoft.com/pt-br/library/system.web.mvc.controller.view(v=vs.118).aspx


    Se ajudou na sua solução, não esqueça de marcar como resposta !


    Abraços,

    Durval Ramos
    Microsoft Partner | MTA | MCSA - SQL Server 2012 | MCSE - Data Platform
    ----------------------------------
    Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"

    sexta-feira, 23 de outubro de 2015 19:03
    Moderador