休息一下并重新观看代码后,我发现了错误。请参阅答案。谢谢你的帮助。
剩下的问题:
- 为什么它没有在大多数数字上给我一个例外?//我无法看到结果。我只知道其他人没有例外。
- 为什么 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'"
当数据库中没有返回的行时,这会导致这种情况。
查询有问题。