我的 ASP.Net 应用程序的数据层调用一个存储过程,以在登录时获取少量(一条记录)有关访问者的信息。我传入他们的电话号码和存储过程,使用一个简单的 SELECT,传回 5 个字段,其中第一个是主键,一个 BIGINT。我的数据层获取 DataRow 并尝试用它创建一个数据对象。在数据对象中,表示主键的属性是一个 Int64。看起来像这样:
sub = new PersistentSubscriber((String) dr["UserFirstName"],
(String) dr["UserLastName"],
phoneNumber, (Int64) dr["UserId"], (Byte) dr["SubscriberStatus"]);
我发现当我有一个大的主键值(例如 88698)时,一切都很好。但是,当我得到一个小的主键值(如 999)时,我在尝试设置时收到“Specified Cast is Invalid”错误该主键属性。当我尝试在立即窗口中使用它时,我得到了这个:
?(Int64)dr["UserId"]
Cannot unbox 'dr["UserId"]' as a 'long'
?(int)dr["UserId"]
999
?(Int32)dr["UserId"]
999
如果不求助于类型化的数据集,我在这里做错了什么?