Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

3
respostas

ao terminar o connection.State e executar da esse erro. Aconteceu para mais alguem?

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

3 respostas

Olá!

O erro System.NullReferenceException indica que algum objeto está com valor null. Como a exceção acontece ao executar connection.Open(), é bem provável que o problema não esteja em connection.State, mas sim no retorno de ObterConexao().

Vale conferir alguns pontos:

  • Se o método ObterConexao() realmente está retornando uma instância de conexão e não null.
  • Se a string de conexão está configurada corretamente (por exemplo, no appsettings.json).
  • Se a classe Connection está conseguindo ler essa configuração antes de criar a conexão.

Uma forma de confirmar é colocar um ponto de interrupção (breakpoint) logo após:

using var connection = new Connection().ObterConexao();

E ve se a variável connection possui uma instância válida ou se já está null.

Se tudo estiver configurado corretamente e o problema continuar, compartilhe aqui o código da classe Connection, especialmente o método ObterConexao(), para que a comunidade consiga identificar a causa com mais precisão.

Também estou tendo o mesmo problema. E a resposta acima não ajuda a identificar a solução do problema.

Resolvi o problema usando o Claude Code, segue a resposta:

Causa raiz: não é um bug na sua classe Connection nem no Program.cs em si — o connection.Open() na linha 8 é executado com sucesso silenciosamente, mas o getter na linha 9 (connection.State) lança uma exceção dentro de Microsoft.Data.SqlClient.SqlConnection.get_State():

System.NullReferenceException: Object reference not set to an instance of an object.
at Microsoft.Data.SqlClient.SqlConnection.get_State()
at Program.

$(String[] args) in Program.cs:line 9

Seu try/catch estava mascarando o rastreamento de pilha (stack trace) real ao imprimir apenas ex.Message — por isso parecia apenas uma Exceção de Referência Nula (NullReferenceException) genérica, sem nenhuma pista de onde ela vinha.

O que está faltando: o projeto tem como alvo o net6.0 (ScreenSound.csproj), que atingiu o fim do suporte e não é mais uma estrutura (framework) contra a qual o pacote Microsoft.Data.SqlClient (v6.x/7.x) é compilado/testado. Nessa combinação, o pacote recorre a um shim de compatibilidade netstandard2.0 cujos internos do SqlConnection não são totalmente inicializados, então .State (e provavelmente outras propriedades) lançam uma Exceção de Referência Nula mesmo que o Open() em si funcione.

Eu confirmei isso com uma reconstrução (rebuild) limpa:

  • A mesma Exceção de Referência Nula foi reproduzida tanto no Microsoft.Data.SqlClient 7.0.2 quanto no 6.1.6, estando em net6.0.
  • Redirecionar o projeto para net8.0 (que você já tem instalado: Microsoft.NETCore.App 8.0.29) corrige o problema imediatamente — connection.State agora imprime corretamente Open.

A única alteração necessária é em ScreenSound/ScreenSound.csproj:

  • net6.0
  • net8.0