2013-09-20 3 views
1

У меня возникла ошибка «Арифметическая операция привела к переполнению». если выполнить следующее условиеПереполнение Исключение: Арифметическая операция привела к переполнению

long countryCode = Convert.ToInt64(dr["Country_Code"]); 
        double curValue = Convert.ToDouble(dr["Conversion_Rate"]); 
        string selectSql = " SELECT NVL ((ABS (" + curValue + " - AVG (conversion_rate))/AVG (conversion_rate)) * 100,0) AS rate_deviation" + 
             " FROM " + DBObjects.TABLE_ODS_CURRENCY_CONVERSIONS + " WHERE country_code = " + countryCode; 

DataTable dtDeviation = this.ServerCfgReader.DefaultDBProvider.DBDataAccess.GetSqlSelection(selectSql); 

Когда я выполнить условие в SQL, приведенный выше запрос получил Арифметические операции привело к исключению переполнения произошло ..

Любое предложение, чтобы решить эту проблему.

+1

Не имеет прямого отношения к вашему вопросу, но вы действительно должны использовать параметры вместо того, чтобы строить свой запрос следующим образом. – Rik

+1

Вы уверены, что это запрос, а не один из тех конвертеров, вызывающих исключение? –

ответ

0

Convert.ToInt64 .... вместо этого используйте двойной.

Кроме того, при создании SQL, как, что использование строки строителя вместо этого, его гораздо более эффективным ...

double countryCode = Convert.ToDouble(dr["Country_Code"]); 
double curValue = Convert.ToDouble(dr["Conversion_Rate"]); 

StringBuilder selectSql = new StringBuilder(); 
selectSql.AppendFormat(" SELECT NVL ((ABS ({0} - AVG (conversion_rate))/AVG (conversion_rate)) * 100,0) AS rate_deviation ",curValue); 
selectSql.AppendFormat(" FROM {0} ", DBObjects.TABLE_ODS_CURRENCY_CONVERSIONS); 
selectSql.AppendFormat(" WHERE country_code = {0}",countryCode); 


DataTable dtDeviation = this.ServerCfgReader.DefaultDBProvider.DBDataAccess.GetSqlSelection(selectSql.ToString()); 

если это невозможно, прочитать: http://www.dreamincode.net/forums/topic/89392-arithmetic-operation-resulted-in-an-overflow/

может быть, ваши цифры слишком велики, чтобы справиться с любым Удваивает тоже ???

Смежные вопросы