2017-06-21 37 views
0

经过休息和重新查看代码后,我发现了错误。请参阅答案。感谢您的帮助。DataTable.Select上的System.ArgumentException(字符串)

问题留给:

  • 为什么不给我上的最数的异常? //我无法看到结果。我只知道其他人没有例外。
  • 为什么DataSetDesigner将该整数(datbase)转换为生成的类中的字符串?

我使用Visual Studio 2017年/ Oracle的DataSet设计让我的应用程序中的类,代表我的数据库。由于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:
敏(551)必须在一个Range对象小于或等于max(-1)。

分离的In -clause我发现,有例外的DataTable.Select呼叫occures。

CutomerID是由数据集设计者给出的String-Property,并且在选择之前检查了DBNULL。如果DataSet.Select"1=1""CustomerID = CustomerID"执行代码工作正常。我还检查了CustomerID的值,发现异常发生时,给出CustomerID is 250。使用硬编码的250而不是row.CustomerID给了我同样的例外。所以它可能与我的表格中的数据有关。我能对付它呢?

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

我在MSDN support.microsoft.com上发现了几乎相同的例外情况,但它仅在.NET Framework 3.5-based applications中表示。我的应用程序使用.NET Framework 4.5.2。

回答

0

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

CutomerID是数据集设计

,在与numberTbl.Select("customerID = " & row.CustomerID)组合为实际的异常给定的String属性。虽然在大多数情况下,这个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'" 
0

当数据库中没有返回行时,这会发生。

查询有问题。

+0

使用'MsgBox(numberTbl.Rows.Count)'我发现数据库给了我'747行'。查询似乎没问题。同样使用'.Select(“customerID =”&123123123123123)',其中最初有0行作为回报并不会给我任何例外。另外.Select不与数据库进行通信,而是与DataTable本身imo进行通信。 – Luke