Pourquoi cette distribution courts int échec?

Nous avons un peu de code que les archives de données à partir d'une base de données Microsoft Access sur un Serveur MS SQL server base de données. En supposant que nous avons un lecteur de données déjà remplie à partir de l'Accès de la table et nous sommes ajout d'un paramètre à un SqlCommand en préparation pour l'insertion, nous avons un transtypage qui est un échec. Voici le code:

oSqlServerDbCmd_ForInsert.Parameters.AddWithValue("@Duration",
     (int) oReader["Duration"]);

Le domaine de la oReader est en fait un Accès Entier, ce qui est une courte distance en C#. Si on jette un bref ici il n'y a pas de problème. Cependant, si on jette un int le code génère une InvalidCastException. J'ai peut-être mal interpréter ce à partir de la La documentation MSDN:

"Il y a un prédéfini conversion implicite de court int, long, float, double, decimal."

...mais il semble que cela devrait fonctionner (mon raisonnement étant, si une conversion implicite est définie pourquoi un transtypage explicite pas de travail?). Je me rends compte que le plâtre n'est même pas nécessaire, car AddWithValue accepte un objet, de sorte que nous avons réellement supprimé la distribution de notre code, mais j'aimerais voir une explication à cette distribution n'était pas juste dans le cas que nous rencontrons quelque chose de ce genre dans l'avenir.

Bon article de Eric Lippert sur ce blogs.msdn.com/b/ericlippert/archive/2009/03/19/...
Ce n'est pas une réponse à votre question, mais il semble que votre @Duration paramètre doit avoir un type de données numérique, dans ce cas, vous ne voulez pas utiliser une valeur de chaîne dans le AddWithValue appel.
J'ai édité le code pour supprimer cette conversion que c'est une distraction de ce que cette question vraiment fini par être sur. La réponse courte est que la chaîne de conversion a été dans le code quand nous avons hérité. Depuis il a travaillé jusqu'à ce que nous avons changé le type de données dans la base de données source, que nous avions avait pas lieu d'étudier le code. Une fois qu'il a été cassé et nous avons creusé dans nous avons vu que la chaîne de conversion a été nécessaire (bien que ne pose pas de problème, croyez-le ou pas).

OriginalL'auteur A. Wilson | 2012-03-16