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