Cela semble être un bogue dans Connector/NET, similaire au bug 75301
mais un peu différent. Lorsqu'il essaie de déterminer les métadonnées des paramètres de la procédure, il crée d'abord une MySqlSchemaCollection
nommées Procedures
avec tous métadonnées sur la procédure. (Il s'agit de SELECT * FROM information_schema.routines WHERE 1=1 AND routine_schema LIKE 'Spike' AND routine_name LIKE 'TestAccess'
requête que vous voyez dans votre journal.)
Le Spike
le compte utilisateur n'est pas autorisé à lire le ROUTINE_DEFINITION
colonne, donc c'est NULL
. Connector/NET s'attend à ce que ce champ soit non NULL et lève une SqlNullValueException
exception essayant de le lire.
Il existe deux solutions :
1) Le premier, que vous avez découvert, consiste à définir CheckParameters=False
dans votre chaîne de connexion. Cela désactivera la récupération des métadonnées de la procédure stockée (évitant le plantage), mais peut entraîner des problèmes plus difficiles à déboguer en appelant d'autres procédures stockées si vous n'obtenez pas exactement l'ordre et le type de paramètres. (Connector/NET ne peut plus les mapper pour vous en utilisant les métadonnées.)
2) Basculez vers une autre bibliothèque MySQL ADO.NET qui n'a pas ce bogue :MySqlConnector sur NuGet . Il est hautement compatible avec Connector/NET, fonctionne plus rapidement et corrige de nombreux problèmes connus .