Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

SqlNullValueException ao executar um procedimento armazenado com MySqlCommand


Isso parece um bug no MySQL Connector/NET da Oracle (também conhecido como MySql.Data ). Não se parece com nenhum bug com o qual eu esteja familiarizado nesse banco de dados de bugs; pode ser necessário arquivar como um novo problema. (Bug 75301 parece semelhante, mas não é imediatamente óbvio que é o mesmo problema.)

Eu recomendaria mudar para MySqlConnector ; é uma biblioteca ADO.NET alternativa para MySQL que tem grande compatibilidade com Dapper e corrige muitos bugs conhecidos no MySQL Connector/NET. MySqlConnector também tem suporte a E/S assíncrona, que é não implementado em Conector/NET; isso será importante se você quiser usar QueryAsync em seu código.

Se você quiser continuar usando o MySQL Connector/NET da Oracle, poderá solucionar o problema adicionando CheckParameters=false à sua cadeia de conexão. Observe que isso pode ser uma alteração importante ao seu código; se você definir a configuração como false, terá que garantir manualmente que os parâmetros adicionados a cada CommandType.StoredProcedure MySqlCommand estão exatamente na mesma ordem que o banco de dados (porque MySql.Data não irá mais corrigi-los para você).

Atualização: Depois de examinar o código-fonte do Connector/NET, parece que seu banco de dados tem alguns dados que não está esperando. Alguma das duas consultas a seguir produz linhas? Em caso afirmativo, quais valores são 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;

Qual servidor MySQL você está usando (MySQL, MariaDB, Amazon Aurora) e qual versão?