System.ArgumentException 在 DataTable.Select 上(字符串)
System.ArgumentException on DataTable.Select(String)
休息一下并重新观看代码后,我发现了错误。见答案。谢谢您的帮助。
剩余问题:
- 为什么大多数号码都没有例外? // 我无法看到结果。我只知道其他人也不例外。
- 为什么 DataSetDesigner 将该整数(数据库)转换为生成的 class 中的字符串?
我正在使用 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'"
休息一下并重新观看代码后,我发现了错误。见答案。谢谢您的帮助。
剩余问题:
- 为什么大多数号码都没有例外? // 我无法看到结果。我只知道其他人也不例外。
- 为什么 DataSetDesigner 将该整数(数据库)转换为生成的 class 中的字符串?
我正在使用 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'"