Sono diventato matto per un paio di giorni alla ricerca del perchè, senza apparente motivo, utilizzando il connettore .NET di MySql, per certe Stored Procedures non riuscivo ad ottenere il valore dei parametri di Output. In realtà il motivo c’era ed era documentato qui.

In pratica succede che se il comando viene eseguito per restituire un reader la collezione dei parametri associati al comando non viene sincronizzata.

Per esempio

Dim myCmd as New MySqlCommand("nome_procedura", Connection)
myCmd.CommandType = CommandType.StoredProcedure
Dim myOutParam as New MySqlParameter("nomeparametro", MySqlDbType.Int32)
myOutParam.Direction = ParameterDirection.Output
myCmd.Parameters.Add(myOutParam)
Dim myReader as MySqlDataReader = myCmd.ExecuteReader()

If Not myCmd.Parameters(myOutParam).Value Is Nothing Then
' Qui i parametri di output non hanno ancora il valore di ritorno
...
...
End If

myReader.Close

If Not myCmd.Parameters(myOutParam).Value Is Nothing Then
' Qui i parametri di output hanno il valore di ritorno
...
...
End If

Se invece il comando viene eseguito con il metodo ExecuteNonQuery … non ci sono problemi.