Mysql
 sql >> Database >  >> RDS >> Mysql

SqlNullValueException durante l'esecuzione di una stored procedure con MySqlCommand

Sembra un bug in MySQL Connector/NET di Oracle (aka MySql.Data ). Non sembra nessun bug con cui ho familiarità in quel database di bug; potrebbe essere necessario archiviare come una nuova emissione. (Bug 75301 sembra simile ma non è immediatamente ovvio che si tratti dello stesso problema.)

Consiglierei di passare a MySqlConnector ; è una libreria ADO.NET alternativa per MySQL che ha un'ottima compatibilità con Dapper e corregge molti bug noti in MySQL Connector/NET. MySqlConnector ha anche un vero supporto I/O asincrono, che è non implementato in Connettore/NET; questo sarà importante se vuoi usare QueryAsync nel tuo codice.

Se desideri continuare a utilizzare MySQL Connector/NET di Oracle, potresti essere in grado di aggirare il problema aggiungendo CheckParameters=false alla stringa di connessione. Tieni presente che questo potrebbe essere un cambiamento fondamentale al tuo codice; se imposti l'impostazione su false, dovrai assicurarti manualmente che i parametri aggiunti a ciascun CommandType.StoredProcedure MySqlCommand sono esattamente nello stesso ordine del database (perché MySql.Data non li riparerà più per te).

Aggiornamento: Dopo aver esaminato il codice sorgente di Connector/NET, sembra che il tuo database abbia alcuni dati che non si aspetta. Una delle seguenti due query produce righe? In tal caso, quali valori sono NULL ?

SELECT * FROM information_schema.routines
WHERE specific_name IS NULL OR
    routine_schema IS NULL OR
    routine_name IS NULL OR
    routine_type IS NULL OR
    routine_definition IS NULL OR
    is_deterministic IS NULL OR
    sql_data_access IS NULL OR
    security_type IS NULL OR
    sql_mode IS NULL OR
    routine_comment IS NULL OR
    definer IS NULL;

SELECT * FROM mysql.proc
WHERE specific_name IS NULL OR
    db IS NULL OR
    name IS NULL OR
    type IS NULL OR
    body IS NULL OR
    is_deterministic IS NULL OR
    sql_data_access IS NULL OR
    security_type IS NULL OR
    sql_mode IS NULL OR
    comment IS NULL OR
    definer IS NULL;

Quale server MySQL stai utilizzando (MySQL, MariaDB, Amazon Aurora) e quale versione?