2017-04-11 141 views
-1

我正在返回registrationID作为存储过程的输出。存储过程可以返回null或int值。所以我在C#中编写下面的代码。我想要设置dbtype null或int,那我该怎么做。将dbtype设置为null或Int为SQL输出参数

p.Add("@TotalRebate", bk.TotalRebate); 
p.Add("@PromotionId", bk.PromotionId); 
p.Add("@RegistrationId", bk.RegistrationId, dbType: DbType.Int32, direction: ParameterDirection.Output); 
_db.Execute("InsertBookingNo", p, commandType: CommandType.StoredProcedure); 

    var registrationId = p.Get<int>("@RegistrationId"); 

感谢

+0

你得到一个例外?如果我们需要帮助,需要更多的代码。 – mxmissile

+0

试图将DBNull强制转换为不可空类型!请注意,直到数据流完成(在'foreach'为Query(...,buffered:false)之后,或GridReader已经为QueryMultiple设置之后,out/return参数才会有更新值),这里是错误 –

+0

Edit问题并添加缺少的代码,包括发生异常的位置。 – mxmissile

回答

1

仍然没有头绪,但你可以试试这个:

var o = p.Get("@RegistrationId"); 

if(o is DBNull.Value) 
{ 
    //value is null 
} 
else 
{ 
    registrationId = Convert.ToInt32(o); 
} 

,或者使用可空INT:

var registrationId = p.Get<int?>("@RegistrationId"); 
+1

我添加了下面的代码,它工作正常'p.Add(“@ PromotionId”,bk.PromotionId); p.Add(“@ RegistrationId”,bk.RegistrationId,dbType:DbType.Int32,direction:ParameterDirection.Output); _db.Execute(“InsertBookingNo”,p,commandType:CommandType.StoredProcedure); var registrationId = p.Get (“@RegistrationId”);' –