2017-04-11 132 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」);' –