sql >> Database >  >> RDS >> Mysql

Minimale toegangsniveaus om de MySql-opgeslagen procedure uit te voeren

Dit lijkt een bug te zijn in Connector/NET, vergelijkbaar met bug 75301 maar een beetje anders. Wanneer het probeert om parametermetadata voor de procedure te bepalen, maakt het eerst een MySqlSchemaCollection genaamd Procedures met alle metagegevens over de procedure. (Dit is de SELECT * FROM information_schema.routines WHERE 1=1 AND routine_schema LIKE 'Spike' AND routine_name LIKE 'TestAccess' vraag die u in uw logboek ziet.)

De Spike gebruikersaccount heeft geen toestemming om de ROUTINE_DEFINITION . te lezen kolom, dus het is NULL . Connector/NET verwacht dat dit veld niet-NULL is en genereert een SqlNullValueException uitzondering die het probeert te lezen.

Er zijn twee oplossingen:

1) De eerste, die je hebt ontdekt, is om CheckParameters=False in te stellen in uw verbindingsreeks. Hierdoor wordt het ophalen van metadata van opgeslagen procedures uitgeschakeld (waardoor de crash wordt vermeden), maar dit kan leiden tot moeilijker te debuggen problemen met het aanroepen van andere opgeslagen procedures als de volgorde en het type parameters niet precies goed zijn. (Connector/NET kan ze niet langer voor u in kaart brengen met behulp van de metadata.)

2) Schakel over naar een andere ADO.NET MySQL-bibliotheek die deze bug niet heeft:MySqlConnector op NuGet . Het is zeer compatibel met Connector/NET, presteert sneller en lost veel bekende problemen .



  1. Een sql-resultaat transponeren zodat één kolom naar meerdere kolommen gaat

  2. COUNT() versus COUNT_BIG() in SQL Server:wat is het verschil?

  3. Wat betekent ORDER BY (SELECT NULL)?

  4. Python Panda's - To_sql gebruiken om grote dataframes in brokken te schrijven