Det här verkar vara en bugg i Connector/NET, liknande bug 75301
men lite annorlunda. När den försöker fastställa parametermetadata för proceduren, skapar den först en MySqlSchemaCollection
heter Procedures
med alla metadata om proceduren. (Detta är SELECT * FROM information_schema.routines WHERE 1=1 AND routine_schema LIKE 'Spike' AND routine_name LIKE 'TestAccess'
fråga som du ser i din logg.)
Spike
användarkontot har inte behörighet att läsa ROUTINE_DEFINITION
kolumn, så det är NULL
. Connector/NET förväntar sig att detta fält inte är NULL och skickar en SqlNullValueException
undantag försöker läsa den.
Det finns två lösningar:
1) Den första, som du har upptäckt, är att ställa in CheckParameters=False
i din anslutningssträng. Detta kommer att inaktivera hämtning av lagrad procedurmetadata (undviker kraschen), men kan leda till svårare att felsöka problem med att anropa andra lagrade procedurer om du inte får exakt rätt ordning och typ av parametrar. (Connector/NET kan inte längre mappa dem åt dig med hjälp av metadata.)
2) Byt till ett annat ADO.NET MySQL-bibliotek som inte har denna bugg:MySqlConnector på NuGet . Den är mycket kompatibel med Connector/NET, presterar snabbare och fixar många kända problem .