Artigo: 810098 - Última revisão: terça-feira, 7 de Novembro de 2006 - Revisão: 5.3

ERRO: Ocorre um erro "Object reference not set to an instance of an object" quando tenta aceder a dados utilizando interoperabilidade de ADO numa página ASP.NET

Dica do SistemaEste artigo aplica-se a um sistema operativo diferente do que está a utilizar. Foi desactivado o conteúdo do artigo, que pode não ser relevante para si.
Este artigo poderá conter hiperligações para contéudo em inglês (ainda não traduzido).

Atenção: ADO e ADO MD não foram totalmente testados num ambiente do Microsoft .NET Framework. Podem provocar problemas intermitentes, especialmente nas aplicações baseadas em serviços ou em aplicações multithread. As técnicas descritas neste artigo só deverão ser utilizadas como uma medida temporária durante a migração para ADO.NET. Apenas deverá utilizar estas técnicas depois de ter efectuado testes exaustivos para se certificar de que não existem problemas de compatibilidade. Quaisquer problemas provocados pela utilização de ADO ou ADO MD, no cenário acima descrito, não são suportados. Para obter mais informações, consulte o artigo que se segue na base de dados de conhecimento da Microsoft (KB, Microsoft Knowledge Base):
840667  (http://support.microsoft.com/kb/840667/ ) You receive unexpected errors when using ADO and ADO MD in a .NET Framework application

Nesta página

Expandir tudo | Reduzir tudo

Sintomas

Num computador com o Microsoft .NET Framework 1.0 instalado (e que não tem o Microsoft Visual Studio .NET instalado), quando tenta aceder a dados utilizando interoperabilidade de ADO numa página ASP.NET que se encontra no mesmo site e que está hospedada no mesmo computador, poderá receber a seguinte mensagem de erro:
Exception Details: System.NullReferenceException: Object reference not set to an instance of an object.

Resolução

Para resolver este problema, registe o ficheiro Adodb.dll na cache de assemblagem global (GAC, global assembly cache). Num computador com apenas o .NET Framework instalado, o ficheiro Gacutil.exe não existe. Obtenha o ficheiro gacutil instalando o Microsoft .NET Framework SDK ou crie um projecto de configuração do Visual Studio.NET que utilize o programa de instalação para instalar os componentes correctos.

Para registar o Adodb.dll na GAC, siga estes passos:
  1. Clique em Iniciar e clique em Executar.
  2. Na caixa de diálogo Executar, escreva o seguinte comando e clique em OK:
    C:\WINDOWS\Microsoft.NET\Framework\v1.0.3705\gacutil /i C:\Programas\Microsoft.NET\Primary Interop Assemblies\adodb.dll

Ponto Da Situação

A Microsoft confirmou que este problema ocorre nos produtos da Microsoft listados no início deste artigo.

Mais Informação

Passos para reproduzir o comportamento

  1. Crie um novo projecto do Microsoft Visual C# com o nome ErroRefADO. Por predefinição, é apresentado WebForm1.aspx.
  2. No menu Project, clique em Add Reference.
  3. No separador .NET, seleccione adodb a partir da lista pendente.
  4. Clique em Select e clique novamente em OK.
  5. Arraste um controlo Label da caixa de ferramentas para WebForm1.aspx.
  6. Em Solution Explorer, clique com o botão direito do rato em WebForm1.aspx e clique em View Code.
  7. Cole o seguinte código no evento Page_Load:

    Nota: tem de alterar o valor do ID de utilizador <nome_utilizador> para uma conta com as permissões adequadas para efectuar estas operações na base de dados.
    		//Criar objectos ADODB
    		ADODB.Connection oConn = new ADODB.ConnectionClass();
    		ADODB.Recordset oRS = new ADODB.RecordsetClass();
    		
    		//Alterar cadeia de ligação dependendo do SQL Server 
    		string strConn = "Provider=SQLOLEDB.1;Persist Security Info=False;User ID=<nome_do_utilizador>;
    		Initial Catalog=pubs;Data Source=O nome do SQLServer";
    			
    		oConn.Open(strConn,"","",0);
    		object objRecs = 100;
    		oRS = oConn.Execute("select au_Id, au_lname from authors", out objRecs,0);
    
    		//O erro é gerado ao referenciar a colecção Fields
    		Label1.Text = oRS.Fields["au_id"].Value.ToString();
    
    		//Fechar todas as ligações
    		oRS.Close();
    		oConn.Close();
    
    		//Fechar todas as ligações
    		oRS = null;
    		oConn = null;
    
    
  8. Copie Adodb.dll (da pasta C:\Programas\Microsoft.NET\Primary Interop Assemblies\) para a pasta Bin da aplicação ErroRefADO.
  9. No menu Build, clique em Build Solution.
  10. Inicie o Microsoft Internet Explorer e navegue para WebForm1.aspx especificando o seguinte URL, em que NomeServidorIIS é o nome do servidor do Microsoft IIS (Serviços de informação Internet - Internet Information Services).
    http://NomeServidorIIS/ErroRefADO/WebForm1.aspx
  11. Identifique um computador de teste com o .NET Framework instalado (sem o Microsoft Visual Studio .NET). No IIS, crie dois directórios virtuais e atribua o nome Teste1 e Teste2 respectivamente.
  12. Crie dois sites idênticos: a partir da pasta ErroRefADO, copie WebForm1.aspx e a pasta Bin para as pastas Teste1 e Teste2 no computador de teste.
  13. Inicie o Microsoft Internet Explorer e navegue para WebForm1.aspx do site Teste1 especificando o seguinte URL, em que NomeServidorIIS é o nome do servidor do Microsoft IIS (Serviços de informação Internet - Internet Information Services).
    http://NomeServidorIIS/Teste1/WebForm1.aspx
  14. Inicie outra instância do Microsoft Internet Explorer e navegue para WebForm1.aspx do site Teste2 especificando o seguinte URL:
    http://NomeServidorIIS/Teste2/WebForm1.aspx
  15. Quando acede a WebForm1.aspx de Teste2, recebe a mensagem de erro descrita na secção "Sintomas".

Referências

Para obter mais informações sobre como registar ficheiros .dll na GAC, visite o seguinte Web site da Microsoft:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cptutorials/html/global_assembly_cache_utility__gacutil_exe_.asp (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cptutorials/html/global_assembly_cache_utility__gacutil_exe_.asp)

A informação contida neste artigo aplica-se a:
  • Microsoft ASP.NET 1.1
  • Microsoft ADO.NET 2.0
  • Microsoft ActiveX Data Objects 2.6
  • Microsoft ActiveX Data Objects 2.7
  • Microsoft ADO.NET 1.1
  • Microsoft ASP.NET 1.0
Palavras-chave: 
kbtshoot kberrmsg kbbug kbwebforms KB810098