2017-06-21 27 views
0

コードを再実行した後、私は間違いを発見しました。 Answersを参照してください。ご協力ありがとうございました。左System.ArgumentException DataTable.Select(String)

質問:

  • なぜそれが私の最も番号の例外を与えていませんか? //私は結果を見ることができませんでした。私は他の人に例外がないことを知っています。
  • なぜDataSetDesignerはその整数(datbase)を生成されたクラスの文字列にキャストしますか?

私は自分のデータベースを表して自分のアプリケーション内のクラスを取得するためのVisual Studio 2017/Oracleのデータセットデザイナを使用しています。 OracleはまだVisual Studio 2017をサポートしていないので、Visual Studio 2015を使用して.xsd DataSetsを生成します。

以下のコードを使用すると、奇妙な例外メッセージが表示されます。

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コールで発生します。

CutomerIDは、データセットデザイナーが指定したString-Propertyであり、選択前にDBNULLを確認しました。 DataSet.Select"1=1"または"CustomerID = CustomerID"で実行される場合、コードは正常に動作します。私はまた、CustomerIDの値をチェックし、例外が発生したことを知ったときに、与えられたCustomerID is 250。 row.CustomerIDの代わりにハードコーディングされた250を使用すると、同じ例外が発生しました。だから、おそらく私のテーブル内のデータと関係があります。それに対して私は何ができますか?

My Stringの構文は他のIDで動作しており、.Select-Methodが自分で生成されていないため、正しいはずです。

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と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 rows'を与えたことがわかりました。クエリは問題ないようです。 '.Select(" customerID = "&123123123123123)'を使っても、0の行が返されても、例外はありません。また、.Selectはデータベースと通信するのではなく、DataTable自体と通信します。 – Luke

関連する問題