c# - 为什么我会收到此错误?

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

我在 SQL Server 中的存储过程中使用函数并返回十进制结果。

在 C# 中,我需要获取它,但出现错误:

"INVALLD CastEXCEPTION was unhandeld by user code" "an exception of type 'system.invaildCastException' occured...'

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

最佳答案

您不能将带有 ParameterDirection.ReturnValue 的参数转换为非整数的数据类型。

The RETURN statement在 T-SQL 中只能返回整数值。

但是,如果您绝对确定您的存储过程总是以 RETURN xxx 之类的内容结尾,那么您可以

val = Convert.ToDecimal(cmd.Parameters["@RESULT"].Value);

关于c# - 为什么我会收到此错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32933436/

相关文章:

jquery - 在 ASP.NET MVC 3 下的 "Page-less"设计中使用 jQuery JSON 请求的 API 驱动设计有哪些缺点?

sql-server - 如何从另一个表模式创建空临时表?

c# - RestSharp 在 POST 上默认 Content-Type 为 application/x-www-form-urlencoded

javascript - 多维数组的 C# 版本

mysql - mysql 中两个日期时间之间

mysql - 将mysql View 中的数据插入到不存在的表中

sql-server - 如何打开 Localdb SQL ProjectV12

sql-server - NHibernate 与 SQL Server 全文

C#:用于显示来自 Windows 服务的实时消息的 GUI

c# - 使用 C# 将默认值插入 SQL Server