ID do artigo: 810098 - Última revisão: quarta-feira, 20 de dezembro de 2006 - Revisão: 6.2

BUG: O erro "Referência de objeto não definida para uma instância de um objeto" ocorre quando você tenta acessar os dados usando o ADO Interop em uma página do 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.
Cuidado Os ADO e os ADO MD não foram totalmente testados em um ambiente do Microsoft .NET Framework. Eles talvez causem problemas intermitentes, especialmente em aplicativos com base em serviço ou em aplicativos multithread. As técnicas descritas neste artigo só devem ser usadas como uma medida temporária durante a migração para o ADO.NET. Você só deve usá-las depois de realizar um teste completo para verificar se não há problemas de compatibilidade. Todos os problemas causados pelo uso de ADO ou de ADO MD dessa maneira não têm suporte. Para obter mais informações, leia o artigo na Base de Dados de Conhecimento Microsoft (a página pode estar em inglês):
840667   (http://support.microsoft.com/kb/840667/ ) Você recebe erros inesperados ao usar ADO e ADO MD em um aplicativo do .NET Framework

Nesta página

Expandir tudo | Recolher tudo

Sintomas

Em um computador que tem o Microsoft .NET Framework 1.0 instalado (e que não tenha o Microsoft Visual Studio .NET instalado), ao tentar acessar os dados usando o ADO Interop em uma página do ASP.NET que resida em um site idêntico e que esteja hospedado no mesmo computador, a seguinte mensagem de erro poderá ser exibida:
Detalhes da Exceção: System.NullReferenceException: Referência de objeto não definida para uma instância de um objeto.

Resolução

Para resolver este problema, registre o arquivo Adodb.dll no GAC (cache de assembly global). Em um computador em que apenas o .NET Framework está instalado, o arquivo Gacutil.exe não existe. Obtenha o arquivo gacutil instalando o Microsoft .NET Framework SDK ou crie um projeto de instalação do Visual Studio.NET que use o instalador para instalar os componentes corretos.

Para registrar Adodb.dll no GAC, execute as seguintes etapas:
  1. Clique em Iniciar e em Executar.
  2. Na caixa de diálogo Executar, digite o seguinte comando e, em seguida, clique em OK:
    C:\WINDOWS\Microsoft.NET\Framework\v1.0.3705\gacutil /i C:\Program Files\Microsoft.NET\Primary Interop Assemblies\adodb.dll

Situação

A Microsoft confirmou que este é um problema nos produtos Microsoft que estão listados no início deste artigo.

Mais Informações

Etapas para reproduzir o comportamento

  1. Crie um novo projeto do Microsoft Visual C# chamado ADORefError. Por padrão, o WebForm1.aspx aparece.
  2. No menu Project, clique em Add Reference.
  3. Na guia .NET, selecione adodb na lista suspensa.
  4. Clique em Select e, em seguida, clique em OK.
  5. Arraste um controle Label da caixa de ferramentas para o WebForm1.aspx.
  6. No Solution Explorer, clique com o botão direito do mouse em WebForm1.aspx e, em seguida, clique em View Code.
  7. Cole o seguinte código no evento Page_Load:

    Observação É necessário alterar o valor de User Id <nome_do_usuário> para uma conta que tenha as permissões apropriadas para realizar as operações no banco de dados.
    		//Create ADODB Objects
    		ADODB.Connection oConn = new ADODB.ConnectionClass();
    		ADODB.Recordset oRS = new ADODB.RecordsetClass();
    		
    		//Change Connection String depending on your SQL Server 
    		string strConn = "Provider=SQLOLEDB.1;Persist Security Info=False;User ID=<username>;Initial Catalog=pubs;Data Source=Your SQLServer Name";
    			
    		oConn.Open(strConn,"","",0);
    		object objRecs = 100;
    		oRS = oConn.Execute("select au_Id, au_lname from authors", out objRecs,0);
    
    		//Error is generated by referencing the Fields collection
    		Label1.Text = oRS.Fields["au_id"].Value.ToString();
    
    		//Close all connections
    		oRS.Close();
    		oConn.Close();
    
    		//Release COM Objects
    		oRS = null;
    		oConn = null;
    
    
  8. Copie o Adodb.dll (da pasta C:\Program Files\Microsoft.NET\Primary Interop Assemblies\) para a pasta Bin do aplicativo ADORefError.
  9. No menu Build, clique em Build Solution.
  10. Inicie o Microsoft Internet Explorer e, em seguida, navegue até o WebForm1.aspx, especificando a seguinte URL, em que Nome_do_Servidor_ISS é o nome do servidor do IIS (Serviços de informações da Internet):
    http://Nome_do_servidor_ISS/ADORefError/WebForm1.aspx
  11. Identifique um computador de teste que tenha o .NET Framework instalado (sem o Microsoft Visual Studio .NET). No IIS, crie dois diretórios virtuais e nomeie-os Test1 e Test2.
  12. Crie dois sites idênticos: da pasta ADORefError, copie o WebForm1.aspx e a pasta Bin para as pastas Test1 e Test2 no computador de teste.
  13. Inicie o Microsoft Internet Explorer e navegue até o WebForm1.aspx do site Test1, especificando a seguinte URL, em que Nome_do_servidor_ISS é o nome do servidor do IIS (Serviços de informações da Internet):
    http://Nome_do_servidor_ISS/Test1/WebForm1.aspx
  14. Inicie outra instância do Microsoft Internet Explorer e navegue até WebForm1.aspx do site Test2, especificando a seguinte URL, em que:
    http://Nome_do_servidor_ISS/Test2/WebForm1.aspx
  15. Ao acessar o WebForm1.aspx de Test2, a seguinte mensagem de erro detalhada na seção SINTOMAS, poderá ser exibida.

Referências

Para obter mais informações sobre como registrar arquivos .dll no GAC, visite o seguinte site da Microsoft (em inglês):
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.0
  • 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
Palavras-chave: 
kbtshoot kberrmsg kbbug kbwebforms KB810098