Ошибка C #: System.Data.EvaluateException: Невозможно выполнить операцию '=' для System.String и System.Int32

1

Используя С#, я получаю исключение:

System.Data.EvaluateException: не удается выполнить операцию "=" в System.String и System.Int32.

Я проследил его до этого кода:

foreach (DataRow rows in dt.Rows){

...etc

string filter = string.Format("CUST_ID = " + rows[0]);
DataRow[] row = dt.Select(filter);

После foreach я foreach к bool, который использует linq, чтобы найти, существует ли запись с тем же CUST_ID в DT в другом datatable. Если false, я перехожу к фильтру строки. Здесь я беру все записи, не существующие во втором datatable, и использую SqlBulkCopy, чтобы поместить их все в БД.

Самое забавное, что просто рука, полная записей, не работает. Их около 7000, и примерно 50 из них вызывают это исключение. Я не вижу разницы между записями. Итак, я не уверен, что мне не хватает.

РЕДАКТИРОВАТЬ:

Одна из записей имеет CUST_ID= 998947, которая будет генерировать исключение.

Я меняю CUST_ID на 987654 и не было никаких исключений.

  • 0
    В какой строке выдает код?
  • 0
    строка DataRow []
Показать ещё 1 комментарий
Теги:
datarow

1 ответ

3
Лучший ответ

Вы должны приложить свой вклад апострофами. Кроме того, при использовании String.Format укажите строку формата и ее параметры. Не просто строка, то вызов String.Format бесполезен. Попробуй это:

 string filter = String.Format("CUST_ID = '{0}'", rows[0].ToString());

EDIT: Извините, неверно изложите свой вопрос. Не заботьтесь о апострофах, если ваша колонка имеет целочисленный тип. Исключение указывает, что вы пытаетесь сравнить строку с int. Если вы уверены, что у них есть int, только небольшой обзор кода от меня:

 string filter = String.Format("CUST_ID = {0}", rows[0].ToString());

Вы также можете попытаться передать CUST_ID в строку и сравнить ее с вашим значением, но это не очень приятное решение.

  • 0
    Апострофы были нужны. Удаление их вызывает то же исключение. Спасибо!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню