System.ArgumentException on DataTable.Select(String)



休息一下并重新观看代码后,我发现了错误。请参阅答案。谢谢你的帮助。

剩下的问题:

  • 为什么它没有在大多数数字上给我一个例外?//我无法看到结果。我只知道其他人没有例外。
  • 为什么 DataSetDesigner 将该整数 (datbase) 强制转换为生成的类中的字符串?

我正在使用Visual Studio 2017/Oracle DataSet Designer在我的应用程序中获取表示我的数据库的类。由于Oracle不支持Visual Studio 2017,我使用Visual Studio 2015生成我的.xsd数据集。

使用下面的代码,我收到一条奇怪的异常消息。

For Each numberRow As myOracleDataSet.CustomerTelNumberRow In numberTbl.Select("customerID = " & row.CustomerID)
// Some more code
Next

System.InvalidArgumentException:
在 Range 对象中,最小值 (551) 必须小于或等于最大值 (-1)。

分离我发现的In-子句,异常发生在DataTable.Select调用上。

CutomerID是数据集设计者给出的String-Property,在选择之前已检查DBNULL。如果使用"1=1""CustomerID = CustomerID"执行DataSet.Select,则代码工作正常。我还检查了 CustomerID 的值,发现当给定的CustomerID is 250时发生了异常。使用硬编码的 250 而不是行。客户 ID 给了我同样的例外。 所以这可能与我的表中的数据有关。我能做些什么来对付它?

我的字符串语法应该是正确的,因为它适用于其他 ID 和 .选择方法不是我自己生成的。

我在 MSDN support.microsoft.com 上发现了几乎相同的异常,但它说它仅适用于.NET Framework 3.5-based applications.我的应用程序使用的是.NET Framework 4.5.2。

我终于解决了!
虽然消息Min (551) must be less than or equal to max (-1) in a Range object.在某种程度上令人困惑,但System.InvalidArgumentException给了我正确的方向。这是小事:

CutomerID 是由数据集设计者提供的字符串属性

这与numberTbl.Select("customerID = " & row.CustomerID)相结合是实际的例外。虽然在大多数情况下,这个字符串 => 整数比较以某种方式工作,但不适用于 250。客户 ID 是两个表中的字符串属性。所以我在没有转换的情况下将字符串与 Int 进行比较。

以下行修正修复了它。

̶n̶̶u̶̶m̶̶b̶̶e̶̶r̶̶t̶̶b̶̶l̶̶.̶̶s̶̶e̶̶l̶̶e̶̶c̶̶t̶("̶c̶̶u̶̶s̶̶t̶̶o̶̶m̶̶e̶̶r̶̶i̶̶d̶̶ ̶=̶ ̶"̶ ̶&̶ ̶̶r̶̶o̶̶w̶̶.̶̶c̶̶u̶̶s̶̶t̶̶o̶̶m̶̶e̶̶r̶̶i̶̶d̶)
numberTbl.Select("customerID = '" & row.CustomerID & "'")
"CustomerID = 250"
"CustomerID = '250'"

当数据库中没有返回的行时,这会导致这种情况。

查询有问题。

最新更新