Partager via


Aplicação exibindo o erro Run-time error '20599': Cannot Open SQL

Em um dos trabalhos de compatibilidade de aplicações com o Windows 7 me deparei com uma aplicação que gerava a seguite mensagem de erro quando tentava abrir um relatório do Crystal Report: 

Run-time error '20599':

Cannot Open SQL

Resumindo o cenário, o cliente não tinha o código-fonte da aplicação, não tinha acesso ao Event Viewer do servidor da base de dados e não possuía manual de implantação da aplicação.

Como a mensagem de erro apenas informava que a aplicação não conseguia se comunicar com a base de dados, a  saída foi reproduzir o problema e capturar a tráfego de rede através do Network Monitor (NetMon). O NetMon é uma ferramenta utilizada para diagnosticar problemas com a conectividade do servidor que permite capturar, visualizar e analisar o tráfego de rede e descifrar os protocolos de rede.

A comunicação entre a aplicação e o SQL Server utiliza o formato de comunicação Microsoft denominado pacote TDS (Tabular Data Stream). Uma vez estabelecida a conexão as mensagens TDS são usadas para a comunicação entre o cliente e o servidor. A figura a seguir ilustra um fluxo simplificado de comunicação para
TDS.

Para facilitar a análise dos dados coletados pelo NetMon filtrei apenas o protocolo TDS para reduzir o volume de informações coletadas (ProtocolName == "TDS"). Após aplicado o filtro a troca de pacotes fica bem fácil de ser analisada. Após aplicado o filtro fica fácil visualizar o fluxo ilustrado na figura anterior.

 

Através da figura abaixo é possível verificar que o servidor SQL está retornando (TDS:Response) o erro "falha de logon" após a aplicação tentar realizar o login na base de dados (TDS:Login7 - define as regras de autenticação para uso entre cliente e servidor).

 

 

A conclusão é que não havia incompatibilidade da aplicação com o Windows 7. O erro era decorrente da configuração incorreta da base de dados de uma fonte de dados ODBC utilizada pela aplicação. A aplicação funcionou corretamente após o cliente informar a base de dados correta.

 

Referência

 

Protocolos de rede e pontos de extremidade TDS

https://msdn.microsoft.com/pt-br/library/ms191220(v=SQL.100).aspx

 

Microsoft Network Monitor 3.4

https://www.microsoft.com/en-us/download/details.aspx?id=4865