Доброе утро, ребята!
У меня есть метод ValidarConexaoEPI
, который проверяет строку подключения, пытаясь открыть соединение с ней.В случае исключений метод, который вызвал «validate» один SolicitarNovaSincronizacao
, перехватывает его и перебрасывает манипулируемое исключение.
public static SincronizacaoSinc SolicitarNovaSincronizacao(int? idUsuario, int idAlmoxarifado, string versaoAplicacao, bool validaSincronizacaoEmAndatmento = true)
{
SincronizacaoSinc sincronizacaoSinc = null;
using (var conexaoLocal = new SqlConnectionEPI(_DbLocalConnectionString))
using (var conexaoServidor = new SqlConnectionEPI(_DbOnlineConnectionString))
{
sincronizacaoSinc = new SincronizacaoSinc(idUsuario, idAlmoxarifado, versaoAplicacao);
try
{
if (UtilDataAccess.ValidarConexaoEPI(conexaoLocal) && UtilDataAccess.ValidarConexaoEPI(conexaoServidor))
{
ValidarAlmoxarifadoBaseOnline(conexaoServidor, idAlmoxarifado);
ValidarUsuarioBaseOnline(conexaoServidor, idUsuario);
CriarRegistroSincronizacao(conexaoLocal, conexaoServidor, sincronizacaoSinc);
if(validaSincronizacaoEmAndatmento)
{
SolicitarSincronizacao(conexaoServidor, sincronizacaoSinc);
}
AtualizarRegistroSincronizacao(conexaoLocal, conexaoServidor, sincronizacaoSinc);
}
conexaoServidor.SqlTransaction.Commit();
conexaoLocal.SqlTransaction.Commit();
}
catch (Exception exception)
{
throw new Exception(String.Format(
"Erro ao iniciar sincronizacao. {0}", exception.Message), exception.InnerException);
}
}
return sincronizacaoSinc;
}
public static bool ValidarConexaoEPI(SqlConnectionEPI conexao) //This method is in another static class
{
try
{
conexao.Open();
}
catch (SqlException sqlException)
{
var dataSource = conexao != null && conexao.SqlConnection != null
? conexao.SqlConnection.DataSource : "string de conexão inválida";
throw new Exception(String.Format(
"Não foi possível estabelecer uma conexão com o banco de dados ({0}).", dataSource), sqlException);
}
catch (Exception exception)
{
throw new Exception(String.Format(
"Não foi possível estabelecer uma conexão com o banco de dados: {0}", exception.Message), exception);
}
return true;
}
Но после повторного выброса я терял данные об исключении.Следующий метод, который вызвал SolicitarNovaSincronizacao (), получает исключение NullReference.Как вы можете видеть:
Исключительная ситуация для ValidarConexaoEPI ():
![](https://i.stack.imgur.com/rRObe.jpg)
Исключительная ситуация NullReference:
![](https://i.stack.imgur.com/8SmlQ.jpg)
Все остальные исключения по SolicitarNovaSincronizacao
в порядке, проблема возникает именно с этим.Исключение, используемое для монтирования нового, в порядке.
PS .: Я знаю, что это не правильное использование try / catch!Не мой код
РЕДАКТИРОВАТЬ:
Вот StackTrace для NullReferenceException:
em AG.ControleEPI.Dados.SqlConnectionEPI.Dispose () на C: \ Projetos \ AG \ TFS2013 \ControleEPI \ Main \ Source-locais \ AG.ControleEPI.Dados \ ADO \ SqlConnectionEPI.cs: linha 28 em AG.ControleEPI.Dados.ADO.SincronizacaoDataAccess.SolicitarNovaSincronizacao (Nullable`1 idAsunda, Штат Афины, Международный университет США, США)C: \ Projetos \ AG \ TFS2013 \ ControleEPI \ Main \ Source-locais \ AG.ControleEPI.Dados \ ADO \ SincronizacaoOnline \ SincronizacaoDataAccess.cs: linha 50 em AG.ControleEPI.Negocio.Gerenciador.idAlmoxarifado, String versaoAplicacao) на C: \ Projetos \ AG \ TFS2013 \ ControleEPI \ Main \ Source-locais \ AG.ControleEPI.Negocio \ GerenciadorCustomizado \ SincronizacaoGerenciador.cs: linha 84