如何从输出参数中获取值,同时还提供值作为输入

本文关键字:输入 输出 参数 获取 | 更新日期: 2023-09-27 18:08:47

我在下面使用我的c#代码

 cn = new SqlConnection(connetionString);
            using (SqlCommand cmd = new SqlCommand("sp_Get_Cur", cn))
            {
                cmd.CommandType = CommandType.StoredProcedure;
                SqlParameter parm = new SqlParameter("@cur", SqlDbType.VarChar);
                parm.Size = 3;
                parm.Value = s_cur;
                parm.Direction = ParameterDirection.Input;
                cmd.Parameters.Add(parm);
                SqlParameter parm2 = new SqlParameter("@val", SqlDbType.Decimal);
                parm2.Direction = ParameterDirection.Output;
                parm2.Value = val;
                cmd.Parameters.Add(parm2);
                cn.Open();
                cmd.ExecuteNonQuery();
                cn.Close();
                return (decimal)cmd.Parameters["@val"].Value; 
            }

my SP is:

ALTER PROCEDURE sp_Get_Cur
@cur VARCHAR(3),
@val decimal(16,2) OUTPUT
AS
BEGIN
DECLARE @rate decimal(16,2)
    SELECT @rate = rate FROM exchange_rate WHERE code = @cur
    SET @val =   @val / @rate
END

但是我得到错误:{"指定的强制转换无效。"}

我想从我的汇率表中得到一种货币的结果。

是否有比输出参数方向类型更容易获得结果的更好方法?

SQL:

DECLARE @val decimal(16,2)
SET @val = 5
EXECUTE sp_Get_Cur 'EUR', @val output
SELECT @val
Result =    6.76

Code Watch, my cmd.Parameters["@val"].Value;

= 5.00;

执行时变成{}还是null?

如何从输出参数中获取值,同时还提供值作为输入

如果您只指定参数作为输出,它将不会向存储过程传递任何值,因此在过程中,您将与返回null的null进行除法。

像这样改变参数方向:

parm2.Direction = ParameterDirection.InputOutput;