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

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 seguinte artigo da Base de Dados de Conhecimento Microsoft:
840667 Recebe erros inesperados quando utiliza o ADO e ADO MD numa aplicação do .NET Framework
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 de utilizador> para uma conta com as permissões adequadas para efectuar estas operações na base 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 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 dos Serviços de Informação Internet da Microsoft (IIS):
    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 dos Serviços de Informação Internet da Microsoft (IIS):
    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 em GAC, visite o seguinte Web site da Microsoft:
Nota Este é um artigo de “PUBLICAÇÃO RÁPIDA” criado directamente a partir da organização de suporte da Microsoft. As informações contidas neste artigo são fornecidas “tal como estão” em resposta a problemas recentes. Devido à urgência em disponibilizar este artigo, os materiais poderão incluir erros tipográficos e ser revistos em qualquer altura sem aviso prévio. Consulte os Termos de Utilização para outras considerações.
Propriedades

ID do Artigo: 810098 - Última Revisão: 10/30/2013 21:57:00 - Revisão: 1.0

  • Microsoft ASP.NET 1.0
  • Microsoft ASP.NET 1.1
  • Microsoft ADO.NET 2.0
  • Microsoft ActiveX Data Objects 2.7
  • Microsoft ADO.NET 1.1
  • kbtshoot kberrmsg kbbug kbwebforms KB810098
Esta informação foi útil?