Используя С#, я получаю исключение:
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 и не было никаких исключений.
Вы должны приложить свой вклад апострофами. Кроме того, при использовании 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 в строку и сравнить ее с вашим значением, но это не очень приятное решение.