【问题标题】:C# error: System.Data.EvaluateException: Cannot perform '=' operation on System.String and System.Int32C# 错误:System.Data.EvaluateException:无法对 System.String 和 System.Int32 执行“=”操作
【发布时间】:2014-12-18 22:31:01
【问题描述】:

使用 C#,我得到一个异常:

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 之后,我转到一个 bool,它使用 linq 来查找在 DT 中具有相同 CUST_ID 的记录是否存在于另一个数据表中。如果为假,那么我转到字符串过滤器。在这里,我将第二个数据表中不存在的所有记录都取出来,并使用 SqlBulkCopy 将它们全部放入数据库中。

有趣的是,只有满手的唱片是行不通的。其中大约有 7000 个,大约 50 个会导致此异常。我看不出记录之间有什么区别。所以,我不确定我错过了什么。

编辑:

其中一条记录有 CUST_ID = 998947,这会引发异常。

我将CUST_ID 更改为987654,没有例外。

【问题讨论】:

  • 代码在哪一行抛出?
  • CUST_ID 字段的数据类型是什么?

标签: c# datarow


【解决方案1】:

您应该用撇号将您的输入括起来。此外,在使用 String.Format 时,请提供格式字符串及其参数。不仅仅是字符串,那么 String.Format 调用就没用了。试试这个:

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

编辑:对不起,误读了您的问题。如果您的列是整数类型,请不要关心撇号。异常告诉您您正在尝试将字符串与 int 进行比较。如果您确定,它们是 int 的,只是我对代码的一点审查:

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

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

【讨论】:

  • 需要撇号。删除它们会导致相同的异常。谢谢!
猜你喜欢
  • 2018-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-15
  • 1970-01-01
  • 1970-01-01
  • 2014-10-13
相关资源
最近更新 更多