Mysql
 sql >> Base de données >  >> RDS >> Mysql

SqlNullValueException lors de l'exécution d'une procédure stockée avec MySqlCommand

Cela ressemble à un bogue dans MySQL Connector/NET d'Oracle (alias MySql.Data ). Cela ne ressemble à aucun bogue que je connaisse dans cette base de données de bogues; il faudra peut-être le classer comme un nouveau numéro. (Bogue 75301 semble similaire, mais il n'est pas immédiatement évident qu'il s'agit du même problème.)

Je recommanderais de passer à MySqlConnector ; c'est une bibliothèque ADO.NET alternative pour MySQL qui a une grande compatibilité avec Dapper et corrige de nombreux bogues connus dans MySQL Connector/NET. MySqlConnector a également une véritable prise en charge des E/S asynchrones, qui n'est non implémentée dans Connecteur/NET ; cela sera important si vous souhaitez utiliser QueryAsync dans votre code.

Si vous souhaitez continuer à utiliser MySQL Connector/NET d'Oracle, vous pourrez peut-être contourner le problème en ajoutant CheckParameters=false à votre chaîne de connexion. Notez que il peut s'agir d'un changement avec rupture à votre code ; si vous définissez le paramètre sur false, vous devrez vous assurer manuellement que les paramètres ajoutés à chaque CommandType.StoredProcedure MySqlCommand sont exactement dans le même ordre que la base de données (car MySql.Data ne les corrigera plus pour vous).

Mise à jour : Après avoir examiné le code source de Connector/NET, il apparaît que votre base de données contient des données auxquelles elle ne s'attendait pas. L'une des deux requêtes suivantes produit-elle des lignes ? Si oui, quelle(s) valeur(s) sont NULL ?

SELECT * FROM information_schema.routines
WHERE specific_name IS NULL OR
    routine_schema IS NULL OR
    routine_name IS NULL OR
    routine_type IS NULL OR
    routine_definition IS NULL OR
    is_deterministic IS NULL OR
    sql_data_access IS NULL OR
    security_type IS NULL OR
    sql_mode IS NULL OR
    routine_comment IS NULL OR
    definer IS NULL;

SELECT * FROM mysql.proc
WHERE specific_name IS NULL OR
    db IS NULL OR
    name IS NULL OR
    type IS NULL OR
    body IS NULL OR
    is_deterministic IS NULL OR
    sql_data_access IS NULL OR
    security_type IS NULL OR
    sql_mode IS NULL OR
    comment IS NULL OR
    definer IS NULL;

Quel serveur MySQL utilisez-vous (MySQL, MariaDB, Amazon Aurora) et quelle version ?