BOGUE : Affichage du message d’erreur « La référence d’objet n’est pas définie à une instance d’un objet » lorsque vous tentez d’accéder à des données à l’aide d’ADO Interop sur une page ASP.NET


Attention Les interfaces ADO et ADO MD n’ont pas été complètement testées dans un environnement Microsoft .NET Framework. Elles peuvent entraîner des problèmes intermittents, en particulier dans des applications basées sur des services ou des applications multithread. Les techniques présentées dans cet article ne doivent être utilisées qu’en tant que mesure temporaire au cours de la migration vers ADO.NET. Vous ne devez vous en servir qu’après avoir effectué tous les tests pour vous assurer de l’absence de problème de compatibilité. Tout problème causé par l’utilisation de l'interface ADO ou ADO MD de cette manière n’est pas pris en charge. Pour plus d’informations, consultez l’article suivant dans la Base de connaissances Microsoft :
840667 Affichage d’erreurs inattendues lors de l’utilisation des interfaces ADO et ADO MD dans une application .NET Framework

Symptômes


Sur un ordinateur sur lequel Microsoft .NET Framework 1.0 est installé (et sur lequel Microsoft Visual Studio .NET est absent), lorsque vous tentez d’accéder à des données, à l’aide d’ADO Interop, sur une page ASP.NET qui réside sur un site identique et qui est hébergée sur le même ordinateur, le message d’erreur suivant peut s’afficher :
Détails concernant l’exception : System.NullReferenceException : La référence d’objet n’est pas définie sur une instance d’un objet.

Résolution


Pour résoudre ce problème, inscrivez le fichier Adodb.dll dans le GAC (Global Assembly Cache). Sur un ordinateur sur lequel seul .NET Framework est installé, le fichier Gacutil.exe n’existe pas. Procurez-vous le fichier gacutil en installant le Kit de développement Microsoft .NET Framework SDK ou créez un projet de configuration Visual Studio .NET qui utilise le programme d’installation pour installer les composants corrects.

Pour inscrire Adodb.dll dans le GAC, procédez comme suit :
  1. Cliquez sur Démarrer, puis sur Exécuter.
  2. Dans la boîte de dialogue Exécuter, tapez la commande suivante, puis cliquez sur OK :
    C:\WINDOWS\Microsoft.NET\Framework\v1.0.3705\gacutil /i C:\Program Files\Microsoft.NET\Primary Interop Assemblies\adodb.dll

Statut


Microsoft a confirmé l’existence de ce problème dans les produits Microsoft répertoriés au début de cet article.

Informations supplémentaires


Procédure pour reproduire le problème

  1. Créez un projet Microsoft Visual C# nommé ADORefError. WebForm1.aspx s’affiche par défaut.
  2. Dans le menu Projet, cliquez sur Ajouter une référence.
  3. Sous l’onglet .NET, sélectionnez adodb dans la liste déroulante.
  4. Cliquez sur Sélectionner, puis sur OK.
  5. Faites glisser un contrôle Étiquette de la boîte à outils vers WebForm1.aspx.
  6. Dans l’Explorateur de solutions, cliquez avec le bouton droit sur WebForm1.aspx, puis cliquez sur Afficher le code.
  7. Collez le code suivant dans l’événement Page_Load :

    Remarque Vous devez affecter à l’ID d’utilisateur <nom_utilisateur> un compte qui dispose des autorisations appropriées pour effectuer les opérations suivantes dans la base de données.
    //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. Copiez Adodb.dll (à partir du dossier C:\Program Files\Microsoft.NET\Primary Interop Assemblies\) dans le dossier Bin de l’application ADORefError.
  9. Dans le menu Générer, cliquez sur Générer la solution.
  10. Démarrez Microsoft Internet Explorer, puis accédez au fichier WebForm1.aspx en spécifiant l’URL suivante, où
    nom_serveur_IIS correspond au nom de votre serveur Microsoft Internet Information Services (IIS) :
    http://nom_serveur_IIS/ADORefError/WebForm1.aspx
  11. Identifiez un ordinateur de test sur lequel .NET Framework est installé (sans Microsoft Visual Studio .NET). Dans IIS, créez deux répertoires virtuels et nommez-les Test1 et Test2.
  12. Créez deux sites identiques : à partir du dossier ADORefError, copiez WebForm1.aspx et le dossier Bin dans les dossiers Test1 et Test2 sur l’ordinateur de test.
  13. Démarrez Microsoft Internet Explorer, puis accédez au fichier WebForm1.aspx du site Test1 en spécifiant l'URL suivante, où
    nom_serveur_IIS correspond au nom de votre serveur Microsoft Internet Information Services (IIS) :
    http://nom_serveur_IIS/Test1/WebForm1.aspx
  14. Démarrez une autre instance de Microsoft Internet Explorer, puis accédez au fichier WebForm1.aspx du site Test2 en spécifiant l’URL suivante :
    http://nom_serveur_IIS/Test2/WebForm1.aspx
  15. Lorsque vous accédez au fichier WebForm1.aspx du site Test2, le message d’erreur décrit dans la section SYMPTÔMES s’affiche.

Références


Pour plus d’informations sur l’inscription de fichiers .dll dans le GAC, reportez-vous au site Web de Microsoft à l’adresse suivante :