2015-03-05 1 views
0

Я создаю таблицу данных с двойниками, как этогоКак правильно написать datatable.Compute (string), когда он дает необъяснимую ошибку?

enter image description here

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

double razao = Variables.dadocobplanaW/Variables.alturaW; 

double min = Convert.ToDouble(DataAccess.Instance.tabelaplanaplatibandaW.Compute("MIN(Variavel)", "Variavel > " + razao.ToString())); 
double max = Convert.ToDouble(DataAccess.Instance.tabelaplanaplatibandaW.Compute("MAX(Variavel)", "Variavel < " + razao.ToString())); 


DataRow[] rows = DataAccess.Instance.tabelaplanaamansardadaW.Select("Variavel = " + min.ToString() + " OR " + "Variavel = " + max.ToString()); 

Я уже повторно проверить таблицы, и их имена, и все правильно, код работает, но когда я получаю значение в razao программа даст сбой при попытке найти min и max

Это потому, что у меня есть 2 линии с одинаковыми Variavel на каждом случае?

Подсказка?

Edit: вот сообщение об ошибке

enter image description here

ответ

2

Проблема может быть вызвана неправильным форматом razao.ToString(), min.ToString(), max.ToString(); проверьте разделитель в этих строках. Это должно быть '.', я полагаю.
Если у вас есть запятая ','; попробуйте это razao.ToString(CultureInfo.InvariantCulture)

+0

У меня есть запятая, потому что это строка. Я тоже мог это понимать, потому что двойник в коде использует «.», А строка использует «,» Может быть, я не понял это, но использовал этот «double min = Convert.ToDouble (DataAccess.Instance. tabelaplanaplatibanda1W.Вычислить («MIN (Variavel)», «Variavel> =» + razao.ToString (CultureInfo.InvariantCulture))); 'и он дал« информацию о культуре »в этом контексте не существует. – ng80092b

+0

добавьте 'using System.Globalization;' в файл кода или используйте полное имя типа 'System.Globalization.CultureInfo.InvariantCulture' – ASh

+0

Он работал, я полагаю, он получает строку, сохраняя точку«. ». вместо того, чтобы преобразовать double в строку с запятой ",". я прав? Это влияет только на параметры, имеющие значение «CultureInfo.InvariantCulture», остальное остается неизменным? – ng80092b

1

Я думаю, что ваша проблема заключается в разборе выражений, используемых методом compute().

Вы можете проверить его, используя нижестоящий код, и вам больше не нужны двойники!

String min = DataAccess.Instance.tabelaplanaplatibandaW.Compute("MIN(Variavel)", String.Format(@"Variavel > {0}", razao.ToString())).ToString(); 

После этого вам нужно найти за код compute() метода. Этот метод использует синтаксический анализатор выражений, который, вероятно, считывает данные из вашей таблицы и анализирует его до узла System.Data. DataColumn.Expression Property

Проблема в части фильтра, и когда Variavel и razao разобрались в System.Double.

В приведенной выше ссылке говорит:

Например, если число в литерал 2147483650, DataSet будет первая попытка разобрать число как Int32. Это не удастся , потому что это число слишком велико. В этом случае DataSet будет анализировать номер как Int64, который будет успешным. Если литерал был числом , превышающим максимальное значение Int64, DataSet будет анализировать литерал с использованием Double. Реальные литералы с использованием научной нотации, такие как 4.42372E-30, являются , проанализированными с использованием System.Double.

В любом случае вы можете изменить свой путь и взять Min и Max из DB. Что я обычно использую.

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