Lorsque vous utilisez appeler le Ainsi, avec le code suivant: P > le Ma question est quand l'objet de lecteur sera-t-il jamais nul ? Je ne l'ai jamais rencontré et la documentation ne mentionne pas que cela pourrait être. Devrais-je vérifier si c'est NULL ou est-il sûr d'ignorer? P> Et pourquoi Resharper pense-t-il que cela pourrait être nul, quand, par exemple, cela me permet d'utiliser le SQLCOMMAND sans recommander qu'il soit vérifié pour NULL? Je suppose qu'il y a un attribut sur la méthode exécuterreader. P> p> sqlcommand.executereader () code>, Resharper me dit que j'ai une éventuelle exception de nullréférence lorsque j'utilise l'objet SqLDatreader après.
tandis que (lecteur.read (lecture.dread ()) code> est souligné. p>
5 Réponses :
J'ai eu cette question avec eux dans quelques autres régions. Il semble qu'ils aient fait une analyse des chemins de code dans les différentes parties du CLR. Quand ils trouvent que cela est concevable de retourner NULL, c'est quand ils se plaignent de cela. P>
Dans le cas particulier que je me suis plaint, NULL ne pouvait pas réellement se produire. Cependant, ils ont suivi le graphe d'appel à une méthode qui pourrait renvoyer NULL, dans certaines circonstances et la valeur null pourrait éventuellement propager au sommet. P>
Donc, je l'appelle un bug de remorque (pensé que je l'ai déjà appelé un bug CLR). P>
C'est un faux positif. P>
réfléchissant sur sqldatareader.executerreader, je peux voir que la seule façon du lecteur est renvoyée comme NULL est si la méthode interne RunexecuterAder est passée "Faux" pour retour, ce qui n'est pas. P>
Dans les profondeurs de SqLDatreader, A i> Le constructeur de lecture est toujours appelé à un moment donné, alors je suis sûr que cela n'est pas physiquement possible pour exécuterAder de retourner NULL. P>
J'ai déterminé une raison pour laquelle exécuterAderader () peut renvoyer NULL. p>
Dans le cas où je recevais une null, j'avais envoyé un script de mon client pour mettre à jour une procédure stockée. Le serveur SQL (2000) de mon client (2000) est configuré pour que les utilisateurs de DB ont besoin d'une autorisation pour exécuter une procédure stockée. Lorsqu'ils ont mis à jour le SP, l'autorisation a été supprimée et non réaffectée. Dans ce cas, le SQLCOMMAND.EXECUTEREADER () a renvoyé un null. P>
Re-attribuer la permission corrigée ceci. P>
Restomer est correct, il peut renvoyer NULL en potentiel. P>
Peu importe si une implémentation spécifique pour exécutereader () code> ne permettra pas de buller une valeur nulle - le fait reste que IDatreader est un objet qui peut contenir (ou point à) null. p>
idbcommand code>? li>
Pour moi, ce n'était pas nul, mais ne produirait rien quand vu dans PowerShell. Cela se produirait lorsque la requête n'a renvoyé aucune ligne de lignes. P>