ERROR: Recibe un mensaje de "Referencia a objeto no establecida como instancia de un objeto" cuando intenta el acceso a los datos utilizando ADO Interop en una página ASP.NET


Precaución ADO y ADO MD no se han probado exhaustivamente en un entorno de Microsoft .NET Framework. Pueden ocasionar problemas intermitentes, especialmente en aplicaciones basadas en servicios o en aplicaciones multiproceso. Las técnicas que se describen en este artículo sólo deben utilizarse como medida temporal durante una migración a ADO.NET. Sólo debe utilizarlas después de haber realizado pruebas exhaustivas para asegurarse de que no hay ningún problema de compatibilidad. No se ofrece soporte técnico para los problemas derivados del uso de ADO o ADO MD de esta manera. Para obtener más información, consulte el artículo siguiente de Microsoft Knowledge Base:
840667 Recibe errores inesperados al utilizar ADO y ADO MD en una aplicación .NET Framework

Síntomas


En un equipo que tiene instalado Microsoft .NET Framework 1.0 (y que no tiene instalado Microsoft Visual Studio .NET), al intentar tener acceso a los datos con ADO Interop en una página ASP.NET que reside en un sitio idéntico y que se aloja en el mismo equipo, puede recibir el mensaje de error siguiente:
Detalles de la excepción: System.NullReferenceException: La referencia de objeto no está establecida en una instancia de un objeto.

Solución


Para resolver este problema, registre el archivo Adodb.dll en la caché de ensamblados global (GAC). En un equipo donde sólo esté instalado .NET Framework, el archivo Gacutil.exe no existe. Obtenga el archivo gacutil instalando Microsoft .NET Framework SDK o cree un proyecto de configuración de Visual Studio.NET que use el instalador para instalar los componentes correctos.

Para registrar Adodb.dll en la GAC, siga estos pasos:
  1. Haga clic en Inicio y, después, en Ejecutar.
  2. En el cuadro de diálogo Ejecutar, escriba el comando siguiente y, luego, haga clic en Aceptar:
    C:\WINDOWS\Microsoft.NET\Framework\v1.0.3705\gacutil /i C:\Program Files\Microsoft.NET\Primary Interop Assemblies\adodb.dll

Estado


Microsoft ha confirmado que se trata de un problema de los productos de Microsoft enumerados al principio de este artículo.

Más información


Pasos para reproducir el comportamiento

  1. Cree un nuevo proyecto de Microsoft Visual C# denominado ADORefError. De manera predeterminada, aparece el archivo WebForm1.aspx.
  2. En el menú Proyecto, haga clic en Agregar referencia.
  3. En la ficha .NET, seleccione adodb en la lista desplegable.
  4. Haga clic en Seleccionar y luego en Aceptar.
  5. Arrastre un control Label desde el cuadro de herramientas a WebForm1.aspx.
  6. En el Explorador de soluciones, haga clic con el botón secundario en WebForm1.aspx y luego haga clic en Ver código.
  7. Pegue el siguiente código en el evento Page_Load:

    Nota Debe cambiar el valor <user name> del Id. de usuario por una cuenta que tenga los permisos necesarios para realizar estas operaciones en la base de datos.
    //Create ADODB ObjectsADODB.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 collectionLabel1.Text = oRS.Fields["au_id"].Value.ToString();//Close all connectionsoRS.Close();oConn.Close();//Release COM ObjectsoRS = null;oConn = null;
  8. Copie Adodb.dll (desde la carpeta C:\Archivos de programa\Microsoft.NET\Primary Interop Assemblies\) a la carpeta Bin de la aplicación ADORefError.
  9. En el menú Generar, haga clic en Generar solución.
  10. Inicie Microsoft Internet Explorer y vaya a WebForm1.aspx especificando la dirección URL siguiente, donde
    nombreServidorIIS es el nombre de su servidor Microsoft Internet Information Services (IIS):
    http://nombreServidorIIS/ADORefError/WebForm1.aspx
  11. Identifique un equipo de prueba que tenga instalado .NET Framework (con Microsoft Visual Studio .NET). En IIS, cree dos directorios virtuales y asígneles el nombre Test1 y Test2.
  12. Cree dos sitios idénticos: en la carpeta ADORefError, copie WebForm1.aspx y la carpeta Bin en las carpetas Test1 y Test2 del equipo de prueba.
  13. Inicie Microsoft Internet Explorer y vaya a WebForm1.aspx del sitio Test1 especificando la dirección URL siguiente, donde
    nombreServidorIIS es el nombre de su servidor Microsoft Internet Information Services (IIS):
    http://nombreServidorIIS/Test1/WebForm1.aspx
  14. Inicie otra sesión de Microsoft Internet Explorer y vaya a WebForm1.aspx de Test2 especificando la dirección URL siguiente:
    http://nombreServidorIIS/Test2/WebForm1.aspx
  15. Cuando tiene acceso a WebForm1.aspx en Test2, recibe el mensaje de error detallado en la sección SÍNTOMAS.

Referencias


Para obtener más información acerca de cómo registrar archivos .dll en GAC, visite el siguiente sitio web de Microsoft: