var param = new DynamicParameters();
param.Add("MsgId", DbType.Int32, direction: ParameterDirection.Output);
connection.Execute(MessageSelOutMessageId, param, commandType: CommandType.StoredProcedure);
count = param.Get<int>("MsgId");
By referencing Dapper, I used the code above to call a Stored Procedure with an output parameter - MsgId. It is working fine, but in some cases, there would be no value returned from the Stored Procedure and the returned output parameter value would be null. In these cases, I got this exception :
Attempting to cast a DBNull to a non nullable type! Note that out/return parameters will not have updated values until the data stream completes (after the 'foreach' for Query(..., buffered: false), or after the GridReader has been disposed for QueryMultiple)
I'd understood that we could mark the return Data Type as nullable to avoid this error by using the code below
count = param.Get<int?>("MsgId");
But, is there any other way to check param.Get("MsgId") == null instead of using nullable data type - int?
Thanks Paulius, tried with dynamic datatype
count = param.Get<dynamic>("MsgId");
and it work as what I'm looking for.
In my case it was due to the Id parameter in stored proc was set as IN and at last, I was also setting its value to LAST_INSERT_ID() whereas in my C# (Dapper code) it was made ParameterDirection.InputOutput.
After I made my stored proc ID as INOUT, the problem got resolved.
In short what I understood was that the Id parameter behaviour (IN/OUT/INOUT) should be in sync at both the places i.e in stored proc and C#.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With