我在SQL Server中的存储过程中使用函数并返回RESULT一个小数。
在C#中,我需要得到它但是我收到错误:
“INVALLD CastEXCEPTION由用户代码”unhandeld“”例外 输入'system.invaildCastException'发生...'
我的C#代码:
decimal? val = null;
SqlConnection con = new SqlConnection(conStr);
con.Open();
using (con)
{
SqlCommand cmd = new SqlCommand("dbo.spSetOrderDetails", con);
cmd.CommandType = CommandType.StoredProcedure;
SqlParameter tvpParam = cmd.Parameters.AddWithValue("@OrderDetailsItemsTVP", dt);
tvpParam.SqlDbType = SqlDbType.Structured;
// this part of code return the SUM
SqlParameter returnParam = cmd.Parameters.Add("@RESULT", SqlDbType.Decimal);
returnParam.Direction = ParameterDirection.ReturnValue;
cmd.ExecuteNonQuery();
val = (decimal)cmd.Parameters["@RESULT"].Value;--HERE I GET THE EXCEPTION
}
con.Close();
return (decimal)val;
答案 0 :(得分:2)
您无法将ParameterDirection.ReturnValue的参数强制转换为非整数的数据类型。
T-SQL中的The RETURN statement只能返回整数值。
但是,如果您完全确定您的存储过程总是以RETURN xxx之类的方式结束,那么您可以
val = Convert.ToDecimal(cmd.Parameters["@RESULT"].Value);
答案 1 :(得分:1)
Data, title, actions
此代码将检查它是否为null或等于dbnull.value。只有在它不为null或dbnull.value时才会进行转换。在null(或dbnull.value)的情况下,它只是将值设置为decimalvalue for decimal。