System.ArgumentException 在 DataTable.Select 上(字符串)

System.ArgumentException on DataTable.Select(String)

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

剩余问题:


我正在使用 Visual Studio 2017 / Oracle DataSet Designer 在我的应用程序中获取代表我的数据库的 classes。由于 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:
Min (551) must be less than or equal to max (-1) in a Range object.

分隔我发现的 In 子句,异常发生在 DataTable.Select 调用中。

CutomerID 是数据集设计者给出的 String-Property,并在 select 之前检查了 DBNULL。如果 DataSet.Select"1=1""CustomerID = CustomerID" 一起执行,代码工作正常。我还检查了 CustomerID 的值,发现在给定 CustomerID is 250 时发生了异常。使用硬编码 250 而不是 row.CustomerID 给了我同样的异常。所以它可能与我的 Table 中的数据有关。我能做些什么来反对它?

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

我在 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 is a String-Property given by the dataset designer

numberTbl.Select("customerID = " & row.CustomerID) 结合使用才是真正的例外。虽然在大多数情况下,此 String => Integer 比较以某种方式起作用,但它不适用于 250。CustomerID 在两个表中都是一个 String 属性。所以我在没有强制转换的情况下将 String 与 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'"