none
BEGIN TRY problema ao gerar erro RRS feed

  • Pergunta

  • Pessoal, preciso de uma ajuda.

    Estou querendo fazer um tratamento de erro, quando ocorrer um erro eu quero disparar um e-mail, porém, quando ocorre o erro, ele não envia, parece que é ignorado, o proprio sql dá o erro.

    Segue o código.

    BEGIN TRY
    	INSERT INTO TabelaDestino
    	SELECT * FROM OpenRowset(
    		  'Microsoft.Jet.OLEDB.4.0',
    		  'Excel 8.0;Database=\\SERVIDOR\Arquivos.xls',
    		  'select * from [lista]')
    END TRY
    BEGIN CATCH
    	SELECT ERROR_MESSAGE()
    	IF @@TRANCOUNT > 0
    		ROLLBACK TRANSACTION;
             -- ROTINA DE ENVIO DE E-MAIL
    END CATCH
    IF @@TRANCOUNT > 0
        COMMIT TRANSACTION;

    sexta-feira, 17 de maio de 2013 14:00

Respostas

  • Carlos, acredito que sei o que pode estar acontecendo, simulei o seu codigo e deu a mesma coisa que deu para voce, porem fiz outro teste e substitui o seu insert por uma conta simples que daria erro, dividi 1/0 e funcionou.

    Partindo disto dei uma olhada no books online e vi que ha varios casos que os try catch não reportam e o seu aparentemente é um deles, quando o seu openrowset não acha o arquivo acredito que seria uma broken client connection que não é tratada pelo try catch, veja abaixo a lista extraida do books online:

    Errors Unaffected by a TRY…CATCH Construct

    <content xmlns="http://ddue.schemas.microsoft.com/authoring/2003/5">

    TRY…CATCH constructs do not trap the following conditions:


    • Warnings or informational messages that have a severity of 10 or
      lower.
    • Errors that have a severity of 20 or higher that stop the SQL Server
      Database Engine task processing for the session. If an error occurs that has
      severity of 20 or higher and the database connection is not disrupted, TRY…CATCH
      will handle the error.
    • Attentions, such as client-interrupt requests or broken client
      connections.
    • When the session is ended by a system administrator by using the KILL
      statement.

    The following types of errors are not handled by a CATCH block when
    they occur at the same level of execution as the TRY…CATCH construct:


    • Compile errors, such as syntax errors, that prevent a batch from
      running.
    • Errors that occur during statement-level recompilation, such as object name
      resolution errors that occur after compilation because of deferred name
      resolution.
    </content>

    Alexandre Matayosi Conde Mauricio.

    • Sugerido como Resposta Renato Pedroso segunda-feira, 20 de maio de 2013 09:11
    • Marcado como Resposta CEFL segunda-feira, 20 de maio de 2013 14:20
    sexta-feira, 17 de maio de 2013 14:52

Todas as Respostas

  • Carlos, tente assim:

    BEGIN TRY
    	INSERT INTO TabelaDestino
    	SELECT * FROM OpenRowset(
    		  'Microsoft.Jet.OLEDB.4.0',
    		  'Excel 8.0;Database=\\SERVIDOR\Arquivos.xls',
    		  'select * from [lista]')
    END TRY
    BEGIN CATCH
    	SELECT ERROR_MESSAGE()
    	IF @@TRANCOUNT > 0
    	begin
    		ROLLBACK TRANSACTION;
    	end
             -- Coloque sua ROTINA DE ENVIO DE E-MAIL aqui
    END CATCH
    IF @@TRANCOUNT > 0
        COMMIT TRANSACTION;


    Alexandre Matayosi Conde Mauricio.

    sexta-feira, 17 de maio de 2013 14:08
  • A rotina de E-mail já esta, mas não execute, porque dá o seguinte erro:

    The OLE DB provider "Microsoft.Jet.OLEDB.4.0" for linked server "(null)" reported an error. The provider did not give any information about the error.

    Isso ocorre porque removi o arquivo do local de origem, que é justamente isso, se ocorrer qualquer erro, quero ser notificado.
    sexta-feira, 17 de maio de 2013 14:17
  • Estranho, por que a principio a sintaxe esta ok, voce ja tentou rodar somente a rotina de email para ver se esta funcionando ?

    Alexandre Matayosi Conde Mauricio.

    sexta-feira, 17 de maio de 2013 14:25
  • Sem a rotina de e-mail, no Studio ao executar, deveria me mostrar o erro, não me mostra, mostra o erro do sql.

    quero saber se existe mais algum detalhe que preciso fazer?

    sexta-feira, 17 de maio de 2013 14:36
  • Faltou no inicio

    SET NOCOUNT ON;

    Agora funcionou, sem estar ON, não funciona.
    • Editado CEFL sexta-feira, 17 de maio de 2013 14:39
    sexta-feira, 17 de maio de 2013 14:38
  • Carlos, acredito que sei o que pode estar acontecendo, simulei o seu codigo e deu a mesma coisa que deu para voce, porem fiz outro teste e substitui o seu insert por uma conta simples que daria erro, dividi 1/0 e funcionou.

    Partindo disto dei uma olhada no books online e vi que ha varios casos que os try catch não reportam e o seu aparentemente é um deles, quando o seu openrowset não acha o arquivo acredito que seria uma broken client connection que não é tratada pelo try catch, veja abaixo a lista extraida do books online:

    Errors Unaffected by a TRY…CATCH Construct

    <content xmlns="http://ddue.schemas.microsoft.com/authoring/2003/5">

    TRY…CATCH constructs do not trap the following conditions:


    • Warnings or informational messages that have a severity of 10 or
      lower.
    • Errors that have a severity of 20 or higher that stop the SQL Server
      Database Engine task processing for the session. If an error occurs that has
      severity of 20 or higher and the database connection is not disrupted, TRY…CATCH
      will handle the error.
    • Attentions, such as client-interrupt requests or broken client
      connections.
    • When the session is ended by a system administrator by using the KILL
      statement.

    The following types of errors are not handled by a CATCH block when
    they occur at the same level of execution as the TRY…CATCH construct:


    • Compile errors, such as syntax errors, that prevent a batch from
      running.
    • Errors that occur during statement-level recompilation, such as object name
      resolution errors that occur after compilation because of deferred name
      resolution.
    </content>

    Alexandre Matayosi Conde Mauricio.

    • Sugerido como Resposta Renato Pedroso segunda-feira, 20 de maio de 2013 09:11
    • Marcado como Resposta CEFL segunda-feira, 20 de maio de 2013 14:20
    sexta-feira, 17 de maio de 2013 14:52