2014-12-18 666 views
1

'=' 操作使用C#,我发现了一个例外:C#错误:System.Data.EvaluateException:无法对System.String和System.Int32

System.Data.EvaluateException: Cannot perform '=' operation on System.String and System.Int32.

我追查回验证码:

foreach (DataRow rows in dt.Rows){ 

...etc 

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

foreach我去哪个使用LINQ找到,如果在DT相同CUST_ID记录在另一数据表中存在一个布尔值后。如果为false,则我转到字符串过滤器。在这里,我将第二个数据表中不存在的所有记录取出,并使用SqlBulkCopy将它们全部放入数据库中。

有趣的是,仅仅充满了记录的手不起作用。大约有7000个,大约50个会导致这个例外。我没有看到记录之间的任何区别。所以,我不确定我错过了什么。

编辑:

一个记录都具有CUST_ID = 998947这将抛出异常。

我改变CUST_ID至987654,也没有例外。

+0

代码抛出哪一行? – 2014-12-18 22:40:36

+0

DataRow []行 – 2014-12-18 22:41:37

+0

这是字段CUST_ID的数据类型? – Steve 2014-12-18 22:43:32

回答

3

你应该用撇号输入你的输入。另外,使用String.Format时,请提供格式字符串及其参数。不只是字符串,那么String.Format调用是无用的。试试这个:

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

编辑:对不起,误读你的问题。如果你的列是整数类型的,不要关心撇号。异常告诉你,你正试图比较字符串与int。如果你是肯定的,他们是整型,只是很少的代码审查从我:

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

您也可以尝试将CUST_ID转换为字符串,并将其与值进行比较,但它是没有太大的很好的解决方案。

+0

需要撇号。删除它们会导致相同的异常。谢谢! – 2014-12-18 22:47:21

相关问题