无法将bigint解压缩到很长时间

时间:2012-09-19 08:02:09

标签: c# asp.net .net sql-server

首先请原谅我的英语。我收到这个错误___ 当我尝试将对象从execucalar()显式转换为long时,它给出不能取消框 executioncalar()to long。

虽然在转换为System.Decimal类型时没有出错。

long? id = (long?)ppwDb.ExecuteScalar(ppwDbCmd); //RAISE eXCEPTION
decimal? id = (decimal?)ppwDb.ExecuteScalar(ppwDbCmd);***// NO eXCEPTION

AND的值为(id = 9874563),表示长距离。

3 个答案:

答案 0 :(得分:4)

你必须投两次:

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;

答案 1 :(得分:2)

试试这个

object retVal = selectCommand.ExecuteScalar();
long? Id = (retVal == DBNull.Value) ? null : Convert.ToInt64(retVal);

答案 2 :(得分:1)

object value = selectCommand.ExecuteScalar(ppwDbCmd);
long? l =  (value != null)?Convert.ToInt64(value):null;

上面应该工作,用对象代替长?直接地,你在返回上面的null语句中明确检查null。

原因是返回的值(作为对象)不是有效的int; 因此,隐式演员不起作用。如果你说转换为int, 你明确地将它转换为int截断中的任何双重因子 返回号码。