私の ASP.Net アプリのデータ層は、ストアド プロシージャを呼び出して、ログイン時に訪問者に関する少量 (1 レコード) の情報を取得します。電話番号を渡すと、sproc は単純な SELECT を使用して 5 つのフィールドを返します。最初のフィールドは主キーである BIGINT です。私のデータ層は DataRow を取得し、それを使用してデータ オブジェクトを作成しようとします。データ オブジェクトで、主キーを表すプロパティは Int64 です。それは次のようになります。
sub = new PersistentSubscriber((String) dr["UserFirstName"],
(String) dr["UserLastName"],
phoneNumber, (Int64) dr["UserId"], (Byte) dr["SubscriberStatus"]);
私が見つけたのは、88698 などの大きな主キー値がある場合、すべてがうまく機能することです。ただし、999 などの小さな値を取得すると、セットアップしようとすると「指定されたキャストは無効です」というエラーが表示されます。その主キー プロパティ。イミディエイト ウィンドウで試してみると、次のようになります。
?(Int64)dr["UserId"]
Cannot unbox 'dr["UserId"]' as a 'long'
?(int)dr["UserId"]
999
?(Int32)dr["UserId"]
999
型指定されたデータセットに頼らずに、ここで何が間違っているのでしょうか?