为什么我收到此错误?

时间:2015-10-04 12:24:40

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

我在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;

2 个答案:

答案 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。