首先请原谅我的英语。我收到这个错误__ 当我尝试将对象从 executescalar() 显式转换为 long 时,它给出了 can not unbox executescalar() 到 long 。
虽然在转换为 System.Decimal 类型时没有错误。
long? id = (long?)ppwDb.ExecuteScalar(ppwDbCmd); //RAISE eXCEPTION
decimal? id = (decimal?)ppwDb.ExecuteScalar(ppwDbCmd);***// NO eXCEPTION
AND 的 id 值为 (id = 9874563) ,表示远距离。
最佳答案
你必须投两次:
long? id = (long?) (decimal?) ppwDb.ExecuteScalar(ppwDbCmd);
第一次转换将拆箱 decimal?
。第二次转换将执行从 decimal?
到 long?
的转换。您不能跳过第一个转换,因为 decimal?
不能拆箱为 long?
。
这假定 ppwDb.ExecuteScalar(ppwDbCmd)
返回 object
但返回的实际值是 decimal?
。
但是,我怀疑如果 id 为 null,ppwDb.ExecuteScalar(ppwDbCmd)
会返回 DBNull.Value
。在这种情况下,您将不得不对该值进行特殊处理:
object result = ppwDb.ExecuteScalar(ppwDbCmd);
long? id = result != DBNull.Value ? (long?) (decimal) result : null;
关于c# - 无法将 bigint 拆箱到 long,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12490683/