Ola galera tudo bem ???

bom tenho uma duvida que se refere ao tratamento de exceções...

tenho que tratar o erro de Fk em um registro quando for excluir, certo!!!!

tem alguma Exception específica para isso???

Try
Dim _Cidade As New Cidade
Try
If Banco.Connection.State <> ConnectionState.Open Then Banco.Connection.Open()
Catch ex As Exception

End Try

Banco.Transaction = Banco.Connection.BeginTransaction

_Cidade = (From e In Banco.Cidades Where e.IDCidade = CInt(txtID.Text) Select e).Single
Banco.Cidades.DeleteOnSubmit(_Cidade)
Banco.SubmitChanges()

GravaLOG(My.Forms.frmPrincipal.IDUsuarioLogado.ToString, _
My.Forms.frmPrincipal.IDEmpresaLogada.ToString, _
_Cidade, _
Nothing, _
Exclusao, _
txtID.Text)

Banco.Transaction.Commit()
Habilita_limpa_campos(New Integer() {1, 2, 4}, False)
DevExpress.XtraEditors.XtraMessageBox.Show("Cidade excluida com sucesso!", "Exclusão", MessageBoxButtons.OK, MessageBoxIcon.Information)
Status = Outros

Catch ex As Exception
Dim I As Integer = InStr(1, ex.ToString, "Constraint", CompareMethod.Text)
If I > 0 Then
DevExpress.XtraEditors.XtraMessageBox.Show("Não é possivel excluir " & txtDescricao.Text & "." & vbNewLine & "Há outros cadastros que dependem deste registro.", "Atenção", MessageBoxButtons.OK, MessageBoxIcon.Warning)
Cancelar.Cancel = True
Else
DevExpress.XtraEditors.XtraMessageBox.Show("Erro ao excluir cidade!", "Exclusão", MessageBoxButtons.OK, MessageBoxIcon.Information)
Cancelar.Cancel = True
End If
Banco.Transaction.Rollback()
Finally
Banco.Connection.Close()
End Try

Exibições: 131

Respostas a este tópico

Tratamento de exceção por controle de concorrência:

http://msdn.microsoft.com/en-us/library/system.data.linq.changeconf...

A exceção mais específica que encontrei para o seu caso: update, delete, insert (submit) eu ACHO que é usando InvalidOperationException. Veja no final da pagina desse linq:

http://msdn.microsoft.com/en-us/library/bb386982.aspx

Fala sobre atualização de uma chave estrangeira : "If you update both the required reference and the corresponding foreign key, you must make sure that they agree. An InvalidOperationException exception is thrown if the two are not synchronized at the time that you call SubmitChanges. Although foreign key value changes are sufficient for affecting an update of the underlying row, you should change the reference to maintain connectivity of the object graph and bidirectional consistency of relationships. "

Se encontrar mais alguma coisa eu posto aqui a noite.
Pronto. Este link abaixo é completo. Pesquise pela palavra "exception":

http://msdn.microsoft.com/en-us/library/bb425822.aspx

Obs! Esse link não mostra apenas tratamento de erro, mas muita coisa sobre acesso a dados utilizando Linq.
O SubmitChanges retorna um SqlException, to tentando achar um padrão nele para não utilizar mensagem para encontrar o erro....

" Catch ex As SqlClient.SqlException"

Júlio Carvalho disse:
Tratamento de exceção por controle de concorrência:

http://msdn.microsoft.com/en-us/library/system.data.linq.changeconf...

A exceção mais específica que encontrei para o seu caso: update, delete, insert (submit) eu ACHO que é usando InvalidOperationException. Veja no final da pagina desse linq:

http://msdn.microsoft.com/en-us/library/bb386982.aspx

Fala sobre atualização de uma chave estrangeira : "If you update both the required reference and the corresponding foreign key, you must make sure that they agree. An InvalidOperationException exception is thrown if the two are not synchronized at the time that you call SubmitChanges. Although foreign key value changes are sufficient for affecting an update of the underlying row, you should change the reference to maintain connectivity of the object graph and bidirectional consistency of relationships. "

Se encontrar mais alguma coisa eu posto aqui a noite.
Tentei utilizar o ChangeConflictException mas ele não cai nele só cai no SqlClient.SqlException e Exception...

Júlio Carvalho disse:
Pronto. Este link abaixo é completo. Pesquise pela palavra "exception":

http://msdn.microsoft.com/en-us/library/bb425822.aspx

Obs! Esse link não mostra apenas tratamento de erro, mas muita coisa sobre acesso a dados utilizando Linq.
Olha no ultimo link que te passei. Nos exemplos dessa documentação do MSDN os tratamentos são feitos com Exception mesmo. ( http://msdn.microsoft.com/en-us/library/bb425822.aspx )

Conforme relatei anteriormente ChangeConflictException faz tratamento de erros de concorrência (http://msdn.microsoft.com/en-us/library/system.data.linq.changeconf...). Isso ocorre quando vc alterou alguma informação, que enquanto vc modificava aquele mesmo registro, outra pessoa chegou e modificou a mesma linha antes de vc e salvou, aí dispara esse tipo de exceção.

Me fala o que vc quer coletar especificamente a exception? Ou vc quer só separar a exceção do banco das demais? Pq se for só pra separar as exceções de banco, vc vc já tem a específica (SqlException). Também pode usar a classe ancestral pra suportar mais tipos de bancos usando "DbException":

catch (DbException dbex)

Os bancos mais comuns herdam dela:

[SerializableAttribute]
public sealed class OracleException : DbException

[SerializableAttribute]
public sealed class SqlException : DbException

[SerializableAttribute]
public sealed class OleDbException : DbException

Espero ter ajudado.

Charles Donizete Alves do Santos disse:
Tentei utilizar o ChangeConflictException mas ele não cai nele só cai no SqlClient.SqlException e Exception...
Júlio Carvalho disse:
Pronto. Este link abaixo é completo. Pesquise pela palavra "exception":

http://msdn.microsoft.com/en-us/library/bb425822.aspx Obs! Esse link não mostra apenas tratamento de erro, mas muita coisa sobre acesso a dados utilizando Linq.
a minha duvida é o seguinte, quando você tentar excluir um registro que é fk em outra tabela que a exception me informe que aquele erro é um erro de integridade para poder mostrar uma mensagem mais amigável para o usuário o que ocorre é que no jeito que eu fiz para ter problemas com Framework traduzindo e não pegar a exceção correta entende, para dar uma mensagem de que o registro não pode ser excluído e da erro quando for uma exceção não esperada...

Júlio Carvalho disse:
Olha no ultimo linque que te passei. Nos exemplos dessa documentação do MSDN os tratamentos são feitos cm Exception mesmo. ( http://msdn.microsoft.com/en-us/library/bb425822.aspx )

Conforme relatei anteriormente o trata erros de concorrência (http://msdn.microsoft.com/en-us/library/system.data.linq.changeconf...). Isso ocorre quando alterou alguma informação, que enquanto vc modificava aquele mesmo registro, outra pessoa chegou e modificou a mesma linha, aí dispara esse tipo de exceção.

Me fala o que vc quer coletar especificamente a exception? Ou vc quer só separar a exceção do banco das demais? Pq se for só pra separar as exceções de banco, vc vc já tem a específica (SqlException). Também pode usar a classe ancestral pra suportar mais tipos de bancos usando "DbException":

catch (DbException dbex)

Os bancos mais comuns herdam dela:

[SerializableAttribute]
public sealed class OracleException : DbException

[SerializableAttribute]
public sealed class SqlException : DbException

[SerializableAttribute]
public sealed class OleDbException : DbException

Espero ter ajudado.

Charles Donizete Alves do Santos disse:
Tentei utilizar o ChangeConflictException mas ele não cai nele só cai no SqlClient.SqlException e Exception...

Júlio Carvalho disse:
Pronto. Este link abaixo é completo. Pesquise pela palavra "exception":

http://msdn.microsoft.com/en-us/library/bb425822.aspx

Obs! Esse link não mostra apenas tratamento de erro, mas muita coisa sobre acesso a dados utilizando Linq.
A propriedade "ErrorCode" não te ajudaria? "dbex.ErrorCode"

A noite monto um erxemplo em casa e creio poder ajudar mais.

Charles Donizete Alves do Santos disse:
a minha duvida é o seguinte, quando você tentar excluir um registro que é fk em outra tabela que a exception me informe que aquele erro é um erro de integridade para poder mostrar uma mensagem mais amigável para o usuário o que ocorre é que no jeito que eu fiz para ter problemas com Framework traduzindo e não pegar a exceção correta entende, para dar uma mensagem de que o registro não pode ser excluído e da erro quando for uma exceção não esperada...

OBRIGADO FICO NO AGUARDO

Júlio Carvalho disse:
A propriedade "ErrorCode" não te ajudaria? "dbex.ErrorCode"

A noite monto um erxemplo em casa e creio poder ajudar mais.

Charles Donizete Alves do Santos disse:
a minha duvida é o seguinte, quando você tentar excluir um registro que é fk em outra tabela que a exception me informe que aquele erro é um erro de integridade para poder mostrar uma mensagem mais amigável para o usuário o que ocorre é que no jeito que eu fiz para ter problemas com Framework traduzindo e não pegar a exceção correta entende, para dar uma mensagem de que o registro não pode ser excluído e da erro quando for uma exceção não esperada...

Sugiro que faça o tratamento pela propriedade "Number" da classe "SqlException" para identificar o erro:

http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlex...

Charles Donizete Alves do Santos disse:
OBRIGADO FICO NO AGUARDO

Júlio Carvalho disse:
A propriedade "ErrorCode" não te ajudaria? "dbex.ErrorCode"

A noite monto um erxemplo em casa e creio poder ajudar mais.

Charles Donizete Alves do Santos disse:
a minha duvida é o seguinte, quando você tentar excluir um registro que é fk em outra tabela que a exception me informe que aquele erro é um erro de integridade para poder mostrar uma mensagem mais amigável para o usuário o que ocorre é que no jeito que eu fiz para ter problemas com Framework traduzindo e não pegar a exceção correta entende, para dar uma mensagem de que o registro não pode ser excluído e da erro quando for uma exceção não esperada...

vou usar esse mesmo obrigado

Júlio Carvalho disse:
Sugiro que faça o tratamento pela propriedade "Number" da classe "SqlException" para identificar o erro:

http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlex...

Charles Donizete Alves do Santos disse:
OBRIGADO FICO NO AGUARDO

Júlio Carvalho disse:
A propriedade "ErrorCode" não te ajudaria? "dbex.ErrorCode"

A noite monto um erxemplo em casa e creio poder ajudar mais.

Charles Donizete Alves do Santos disse:
a minha duvida é o seguinte, quando você tentar excluir um registro que é fk em outra tabela que a exception me informe que aquele erro é um erro de integridade para poder mostrar uma mensagem mais amigável para o usuário o que ocorre é que no jeito que eu fiz para ter problemas com Framework traduzindo e não pegar a exceção correta entende, para dar uma mensagem de que o registro não pode ser excluído e da erro quando for uma exceção não esperada...

RSS

© 2019   Criado por Ramon Durães.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço