Dette ser ud til at være en fejl i Connector/NET, der ligner bug 75301
men lidt anderledes. Når den forsøger at bestemme parametermetadata for proceduren, opretter den først en MySqlSchemaCollection
navngivet Procedures
med alle metadata om proceduren. (Dette er SELECT * FROM information_schema.routines WHERE 1=1 AND routine_schema LIKE 'Spike' AND routine_name LIKE 'TestAccess'
forespørgsel, du ser i din log.)
Spike
brugerkontoen har ikke tilladelse til at læse ROUTINE_DEFINITION
kolonne, så den er NULL
. Connector/NET forventer, at dette felt ikke er NULL og sender en SqlNullValueException
undtagelse forsøger at læse den.
Der er to løsninger:
1) Den første, som du har opdaget, er at indstille CheckParameters=False
i din forbindelsesstreng. Dette vil deaktivere hentning af metadata for lagrede procedurer (for at undgå nedbrud), men kan føre til problemer, der er sværere at fejlfinde ved at kalde andre lagrede procedurer, hvis du ikke får rækkefølgen og typen af parametre helt rigtigt. (Connector/NET kan ikke længere kortlægge dem for dig ved hjælp af metadataene.)
2) Skift til et andet ADO.NET MySQL-bibliotek, der ikke har denne fejl:MySqlConnector på NuGet . Den er yderst kompatibel med Connector/NET, yder hurtigere og retter en masse kendte problemer .