C#-当从一个数字执行强制转换时,值必须是一个小于无限大的数

OldDbDataReader reader = new OldDbDataReader();
long price = new long();
if(reader.read())
  price = (long)reader["PRICE"];

报错说强制类型转换出错,并说“当从一个数字执行强制转换时,值必须是一个小于无限大的数”。数据库PRICE字段设置成了“数字”,是长整型。
网上搜各种,最后用price = long.Parse(reader["PRICE"].ToString()); 替换了成功的。

于是不太懂二者的差别,为什么之前的不成功,后来的成功了呢?

求助。

不需要必须 必须是不可能的