Usuário com melhor resposta
Pegar try catch(exception)

Pergunta
-
Uso VS2010, c# aspnet4, SQLserver2008, entity
Uso SQLServer2008 e EntityFramework, Tenho a tabela Paciente, com o campo Nome (unique),
Com faço para saber e pegar o erro específico se o usuário tentar inserir um nome que já existe, e adicionar o erro ao LblErro.Text
protected void BtnSalvar_Click(object sender, EventArgs e)
{
try
{
-----> aqui fica o código para salvar, está funcionando ok
}
catch (Exception)
{
LblErro.Text = "Desculpe!...";
}
}- Editado Álvaro Luiz quarta-feira, 5 de setembro de 2012 10:36
Respostas
-
Sempre que puder evitar, deixe o (Excepetion ex) em último em uma linha de catch, ele é muito pesado e lento. tente sempre descobrir os possíveis erros e coloque os catch's possíveis em uma linha de estrutura de cima pra baixo ( Exception em último).
Exemplo:
(SqlException ex)
(ErrorException ex)
(Exception ex)
Se a resposta foi útil por favor qualifique. Italo Biguzi Duarte, Desenvolvedor ASP.NET C#, Italo.biguzzi@gmail.com
- Marcado como Resposta Álvaro Luiz segunda-feira, 10 de setembro de 2012 00:36
-
Vitor consegui pegar assim, tá certo dessa forma?
catch (Exception ex)
{
if (((ex.InnerException).InnerException).Message.Contains("UNIQUE KEY"))
{
LblResposta.Text = "erro duplicidade ";
}
}
Esta, porem seu código pode disparar uma exception caso o InnerException esteja nulo:
try { //Entity } catch (Exception ex) { if (ex.InnerException != null) if (ex.InnerException.Message.Contains("UNIQUE KEY")) ; //Seu código de tratamento }
Vitor Mendes | Seu feedback é muito importante para todos!
Visite o meu site: http://www.vitormendes.com.br/- Marcado como Resposta Álvaro Luiz quarta-feira, 5 de setembro de 2012 13:45
- Não Marcado como Resposta Álvaro Luiz quarta-feira, 5 de setembro de 2012 16:44
- Marcado como Resposta Álvaro Luiz segunda-feira, 10 de setembro de 2012 00:36
Todas as Respostas
-
Bom dia
Tente isso aqui
protected void BtnSalvar_Click(object sender, EventArgs e) { try { -----> aqui fica o código para salvar, está funcionando ok } catch (Exception e) { LblErro.Text = "Desculpe!..." + e.message; } }
Bruno Viegas D. Ribeiro
-
Olá Bruno
Gostaria de saber se o erro que gerou é referente a um tentativa de inserir um nome que já existe no banco, duplicidade, lembrado que uso SQLServer2008 e EntityFramework,
algo assim:
catch(Exception erro)
{
if(erro.number == xxxx) // duplicidade
{
//voce tentou inserir um registro que já existe
}
-
Boa_Vida o correto seria você validar campos que contenha constraint do tipo unique antes do insert/update, alertando o usuário de uma possível duplicidade. Deixar estourar a exception seria o ultimo caso, o Number para válidação é 2601, caso o tipo da exception seja SqlException:
const int SqlDuplicateKeyError = 2601; try { db.Update(record); } catch (SqlException ex) { switch (ex.Number) { case SqlDuplicateKeyError: // Custom error handling here default: throw; } }
Referencia:
Vitor Mendes | Seu feedback é muito importante para todos!
Visite o meu site: http://www.vitormendes.com.br/ -
-
Certamente o Exception que foi disparado do entity é um UpdateException ou InsertException caso seja insert, tente pegar o InnerException e verificar se pertence ao SQL:
try { db.Update(record); } catch (Exception ex) { if (ex.InnerException is System.Data.SqlClient.SqlException) { switch (((System.Data.SqlClient.SqlException)ex.InnerException).Number) { case SqlDuplicateKeyError: // Custom error handling here default: throw; } } }
Vitor Mendes | Seu feedback é muito importante para todos!
Visite o meu site: http://www.vitormendes.com.br/ -
Vitor Fiz assim
catch (Exception ex)
{
if (ex.InnerException is System.Data.SqlClient.SqlException)
{
if (((System.Data.SqlClient.SqlException)ex.InnerException).Number == 2601)
{
LblResposta.Text = "Duplicado";
}
}
else
{
LblResposta.Text = ex.Message; --------------> entrou aqui e deu o erro abaixo
}
}-----------------
retorno assim
An error occurred while saving entities that do not expose foreign key properties for their relationships. The GetEntityEntry method will return null because a single entity cannot be identified as the source of the exception. Handling of exceptions while saving can be made easier by exposing foreign key properties in your entity types. See the InnerException for details.
-
-
Vitor consegui pegar assim, tá certo dessa forma?
catch (Exception ex)
{
if (((ex.InnerException).InnerException).Message.Contains("UNIQUE KEY"))
{
LblResposta.Text = "erro duplicidade ";
}
}
Esta, porem seu código pode disparar uma exception caso o InnerException esteja nulo:
try { //Entity } catch (Exception ex) { if (ex.InnerException != null) if (ex.InnerException.Message.Contains("UNIQUE KEY")) ; //Seu código de tratamento }
Vitor Mendes | Seu feedback é muito importante para todos!
Visite o meu site: http://www.vitormendes.com.br/- Marcado como Resposta Álvaro Luiz quarta-feira, 5 de setembro de 2012 13:45
- Não Marcado como Resposta Álvaro Luiz quarta-feira, 5 de setembro de 2012 16:44
- Marcado como Resposta Álvaro Luiz segunda-feira, 10 de setembro de 2012 00:36
-
Vitor desmarquei a resposta só pra voce me responder mais esse, (depois marco de novo ;-) )
É preciso eu por esse segundo else
if (ex.InnerException != null)
{
if (((ex.InnerException).InnerException).Message.Contains("REFERENCE"))
{
msgException.Value = ("registro sendo referenciado");
}
else
{
msgException.Value = ("ERRO AO EXCLUIR REGISTROS");
}
}else --------> é necessário esse segundo else caso o ex.InnerException ==null ??
{
msgException.Value = ("ERRO AO EXCLUIR REGISTROS");
}
}
- Editado Álvaro Luiz quarta-feira, 5 de setembro de 2012 16:45
-
Sempre que puder evitar, deixe o (Excepetion ex) em último em uma linha de catch, ele é muito pesado e lento. tente sempre descobrir os possíveis erros e coloque os catch's possíveis em uma linha de estrutura de cima pra baixo ( Exception em último).
Exemplo:
(SqlException ex)
(ErrorException ex)
(Exception ex)
Se a resposta foi útil por favor qualifique. Italo Biguzi Duarte, Desenvolvedor ASP.NET C#, Italo.biguzzi@gmail.com
- Marcado como Resposta Álvaro Luiz segunda-feira, 10 de setembro de 2012 00:36