1

私の 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

型指定されたデータセットに頼らずに、ここで何が間違っているのでしょうか?

4

2 に答える 2

1

試してみてくださいInt64.TryParse

long userId;
if(Int64.TryParse(dr["UserId"], out userId))
{
    // successful conversion
}
于 2010-06-04T23:34:49.630 に答える