Erreur Sql “opération Arithmétique a entraîné un dépassement de capacité.”
Je suis en cours d'exécution d'un service qui fait un peu de calcul et communique avec un serveur ms sql toutes les minutes environ (24/7, le temps de fonctionnement est très important) et les écritures de journal d'erreur si quelque chose de drôle qui se passe (comme un délai d'attente ou de perte de connexion).
Cela fonctionne très bien, cependant une fois que je reçois cette erreur:
Opération arithmétique a entraîné un dépassement de capacité.
Puisque c'est à exécuter sur le client, et l'exception a eu lieu 3 fois depuis que le projet a été lancé (un couple de mois maintenant) ce serait extrêmement difficile à attraper et à déboguer.
Je suis en utilisant OleDbDataAdapter pour communiquer avec le serveur. Les données reçues du serveur n'était pas quelque chose de particulier, que je suis conscient de au moins! Les données ne doivent jamais dépasser les tailles de champ etc, donc je ne peux pas vraiment penser à une raison pour cette erreur se produit. Là encore, c'est extrêmement difficile à vérifier car j'ai tout ce que j'obtiens est le message d'erreur.
Ma question est: Pourquoi cette erreur peut s'accumuler? J'ai été incapable de trouver une réelle information à ce sujet sur le web, donc si quelqu'un pouvait me fournir quelques informations, ce serait très apprécié.
Merci!
MODIFIER: UNE attention à lire le rapport d'erreur m'a montré que cette erreur a effectivement eu lieu durant le Remplissage de l'objet DataTable. Le Code ressemble à ceci:
DataTable.Clear();
try
{
oledbdataAdapter.Fill(DataTable, sqlString);
}
catch (Exception e)
{
//error has occured, report
}
Quelqu'un peut-il donner un sens à cela?
EDIT2: j'ai juste pensé à ce ... Est-il possible que cette exception peut être levée, car le système ne dispose pas de suffisamment de ressources système pour terminer le Remplissage? C'est la seule raison pour laquelle je pense, qui pourrait expliquer l'exception se produise. Cela expliquerait aussi pourquoi il ne se produit que sur certains serveurs, et ne se produit jamais sur le serveur de dev ...
EDIT3: Ici est l'ensemble de l'exception dans le cas où il donne à personne plus de perspicacité:
System.OverflowException: Arithmetic operation resulted in an overflow.
at System.Data.DataTable.InsertRow(DataRow row, Int32 proposedID, Int32 pos, Boolean fireEvent)
at System.Data.DataTable.LoadDataRow(Object[] values, Boolean fAcceptChanges)
at System.Data.ProviderBase.SchemaMapping.LoadDataRow()
at System.Data.Common.DataAdapter.FillLoadDataRow(SchemaMapping mapping)
at System.Data.Common.DataAdapter.FillFromReader(DataSet dataset, DataTable datatable, String srcTable, DataReaderContainer dataReader, Int32 startRecord, Int32 maxRecords, DataColumn parentChapterColumn, Object parentChapterValue)
at System.Data.Common.DataAdapter.Fill(DataSet dataSet, String srcTable, IDataReader dataReader, Int32 startRecord, Int32 maxRecords)
at System.Data.Common.DbDataAdapter.FillInternal(DataSet dataset, DataTable[] datatables, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)
at System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)
at System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, String srcTable)
at INDAZajemService.INDAZajem.FillDataSet()
Vous devez vous connecter pour publier un commentaire.
Si vous faites des calculs sur des agrégations sur les données, puis il semble se traduire dans les plus grands résultats, puis la structure de la table est attend.
Cela se produit généralement lorsque vous avez un certain nombre qui est trop grand ou trop petit pour tenir dans un certain type de données. Donc, si vous aviez, par exemple, le nombre 120398018209571037 et essayé de le mettre dans un Int32, vous obtiendrez cette erreur. Vous aurez besoin de mettre un peu plus d'informations dans votre code sur l'endroit où ce qui se passe dans l'ordre à la broche vers le bas. Bonne chance!
J'ai été faire un select et de remplir un
DataAdapter
avec les résultats. Ce code est dans une boucle et avant la boucle se termine, j'ai effacer mon DataTable:varDataTable.Clear()
.ex:
Mais après un 65xxx enregistrements, j'ai reçu le message d'erreur
Arithmetic operation resulted in an overflow
.Je ne suis pas sûr, mais je pense que le datatable est "coté" avec les premiers résultats. Évidemment, mes premiers enregistrements étaient entiers.
Pour résoudre cela, je ne désactivez pas les DataTableTasas, je le libère comme suit:
Espère que cette aide.
J'ai résolu le problème quand je l'utilise VS.Net 2013 avec SQL Server en tant que serveur. Il suffit de régler le projet de construire en "x86" au lieu de "any cpu". et là vous allez. Mais bien-sûr, vous avez besoin de vérifier vos exigences en premier.
J'ai eu ce problème, mais uniquement lors de la connexion à partir d'une application web s'exécutant sous IIS. La solution dans mon cas était:
Je n'ai même pas de redémarrage de l'application de la piscine, le changement le problème a été résolu immédiatement.