Isso parece ser um bug no Connector/NET, semelhante ao bug 75301 mas um pouco diferente. Ao tentar determinar metadados de parâmetro para o procedimento, ele primeiro cria um
MySqlSchemaCollection
chamado Procedures
com todos metadados sobre o procedimento. (Este é o SELECT * FROM information_schema.routines WHERE 1=1 AND routine_schema LIKE 'Spike' AND routine_name LIKE 'TestAccess'
consulta que você vê em seu log.) O
Spike
conta de usuário não tem permissão para ler o ROUTINE_DEFINITION
coluna, então é NULL
. O Connector/NET espera que este campo não seja NULL e lança uma SqlNullValueException
exceção tentando lê-lo. Existem duas soluções alternativas:
1) O primeiro, que você descobriu, é definir
CheckParameters=False
em sua cadeia de conexão. Isso desabilitará a recuperação de metadados de procedimento armazenado (evitando a falha), mas pode levar a problemas mais difíceis de depurar chamando outros procedimentos armazenados se você não obtiver a ordem e o tipo de parâmetros exatamente corretos. (O Connector/NET não pode mais mapeá-los para você usando os metadados.) 2) Mude para uma biblioteca ADO.NET MySQL diferente que não tenha este bug:MySqlConnector em NuGet . É altamente compatível com Connector/NET, executa mais rápido e corrige muitos problemas conhecidos .