Wygląda na to, że jest to błąd w Connector/NET, podobny do błąd 75301
ale trochę inaczej. Kiedy próbuje określić metadane parametrów dla procedury, najpierw tworzy MySqlSchemaCollection
o nazwie Procedures
ze wszystkimi metadane dotyczące procedury. (To jest SELECT * FROM information_schema.routines WHERE 1=1 AND routine_schema LIKE 'Spike' AND routine_name LIKE 'TestAccess'
zapytanie, które widzisz w swoim dzienniku).
Spike
konto użytkownika nie ma uprawnień do odczytu ROUTINE_DEFINITION
kolumna, więc jest to NULL
. Connector/NET oczekuje, że to pole będzie inne niż NULL i zgłasza SqlNullValueException
wyjątek próbujący go przeczytać.
Istnieją dwa obejścia:
1) Pierwszym, który odkryłeś, jest ustawienie CheckParameters=False
w ciągu połączenia. Spowoduje to wyłączenie pobierania metadanych procedur składowanych (uniknięcie awarii), ale może prowadzić do trudniejszych do debugowania problemów z wywoływaniem innych procedur składowanych, jeśli kolejność i typ parametrów nie zostaną dokładnie ustawione. (Łącznik/NET nie może już ich mapować za pomocą metadanych).
2) Przełącz się na inną bibliotekę ADO.NET MySQL, która nie ma tego błędu:MySqlConnector na NuGet . Jest wysoce kompatybilny z Connector/NET, działa szybciej i naprawia wiele znane problemy .