“Cast spécifié n'est pas valide” lorsque le remplissage de Table de OracleDataAdapter.Fill()

Je n'arrive pas à trouver cette question n'importe où sur Google (ou StackOverflow), qui m'a vraiment surpris, donc je suis en train de mettre sur ici pour aider les autres dans la même situation.

J'ai une requête SQL qui fonctionne très bien sur Oracle Sql Developer, mais quand je le lance à travers C# à l'aide deadapter.Fill(table) pour obtenir les résultats, je reçois Specified cast is not valid erreurs (System.InvalidCastException).

Ici est coupe-bas version de code C#:

var resultsTable = new DataTable();

using (var adapter = new OracleDataAdapter(cmd))
{
    var rows = adapter.Fill(resultsTable);  //exception thrown here, but sql runs fine on Sql Dev

    return resultsTable;
}

Et voici une version simplifiée de la SQL:

SELECT acct_no, market_value/mv_total
FROM myTable
WHERE NVL(market_value, 0) != 0
AND NVL(mv_total, 0) != 0

Si je supprime la clause de division, il n'a pas d'erreur donc c'est spécifique à l'. Toutefois, les deux market_value et mv_total sont de type(19,4) et je peux voir que l'adaptateur Oracle s'attend à une décimale, donc ce casting a lieu? Pourquoi fonctionne-t-il SqlDev mais pas en C#?

InformationsquelleAutor namford | 2014-05-29