1

在休息并重新查看代码后,我发现了错误。请参阅答案。感谢您的帮助。

剩下的问题:

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

我正在使用 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:
Min (551) 必须小于或等于 Range 对象中的 max (-1)。

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

CutomerIDString-Property由数据集设计者给定的,并DBNULL在选择之前进行了检查。如果使用orDataSet.Select执行,代码可以正常工作。我还检查了 CustomerID 的值,发现当给定. 使用硬编码 250 而不是 row.CustomerID 给了我同样的例外。所以它可能与我表中的数据有关。我能做些什么呢?"1=1""CustomerID = CustomerID"CustomerID is 250

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

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

4

2 回答 2

2

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

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

结合起来numberTbl.Select("customerID = " & row.CustomerID)是实际的例外。虽然在大多数情况下,这种 String => Integer 比较在某种程度上有效,但它不适用于 250。CustomerID 是两个表中的字符串属性。因此,我将 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'"
于 2017-06-21T11:30:42.423 回答
0

当没有从数据库返回的行时,就会发生这种情况。

查询有问题。

于 2017-06-21T09:30:30.870 回答