2009-12-16 7 views
1

Original Question:Pourquoi une erreur de dépassement arithmétique est-elle générée lors de la conversion numérique en type de données numérique dans ADO.NET?

Pourquoi ai-je une erreur de dépassement arithmétique conversion numérique à numérique de type de données dans le code ADO.NET en utilisant le type de données lorsque l'argent montant est supérieur à 999,999,99 $?


Tout comme la question dit ... J'ai un peu de code ADO.net dans la couche d'accès aux données qui parle à une base de données Sql Server 2008. Il y a une colonne Montant dans la table qui est du type de données "Money". Le code fonctionne très bien lors de l'insertion d'un record avec un montant < 1000000 $, mais jette cette erreur lorsque la quantité est> = 1000000 $:

« Erreur de dépassement arithmétique conversion numérique type de données numériques »

je peux exécuter manuellement t-sql par rapport à la base de données en mettant à jour le montant à une valeur supérieure à 1 000 000 $ afin que la base de données puisse sauf le montant exact ... qu'est-ce qui est à l'origine de la SqlCommand qui provoque l'erreur?

 MyCommand.Parameters.Add(New SqlParameter("@Amount", SqlDbType.Money)) 
     If IsNothing(Amount) Then 
      MyCommand.Parameters("@Amount").Value = Convert.DBNull 
     Else 
      MyCommand.Parameters("@Amount").Value = Amount 
     End If 
+1

C'était un titre vraiment long ..... –

+0

Quel type de données est la variable Amount? –

+0

Type de la variable Montant = Décimal – codethrift

Répondre

1

Si une erreur se produit l'appel d'une procédure stockée avec une valeur, mais aucune erreur se produit lorsque la mise à jour directement sur la table avec la même valeur, qui jette suspition le type du paramètre @amount de données. Assurez-vous qu'il est également défini comme argent.

+0

Comme vous l'avez souligné à travers votre question ... Le montant était un nombre décimal mais la colonne sql était de l'argent. Une fois que j'ai converti la valeur avant d'appeler la procédure stockée cela a fonctionné parfait: CType (Amount, Data.SqlTypes.SqlMoney). Merci! – codethrift

Questions connexes