从SQL查询返回参数

本文关键字:参数 返回 查询 SQL | 更新日期: 2023-09-27 18:29:28

我正在尝试运行一个sql存储过程,并从查询中返回一个值。我的语法抛出错误:

无法将类型"System.Data.SqlClient.SqlParameter"隐式转换为"decimal"

这是我的语法,我应该更改什么才能正确运行?

public Decimal ReturnValueFromQuery(string connectionString, string sqlQuery, int blah, DateTime d1, DateTime d2)
{
string cs = System.Configuration.ConfigurationManager.AppSettings[connectionString].ToString();
try
{
    using (SqlConnection conn = new SqlConnection(cs))
    using (SqlCommand cmd = conn.CreateCommand())
    {
        cmd.CommandText = sqlQuery;
        cmd.Connection = conn;
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.Parameters.Add("@blah", SqlDbType.Int).Value = blah;
        cmd.Parameters.Add("@startDate", SqlDbType.Date).Value = d1;
        cmd.Parameters.Add("@endDate", SqlDbType.Date).Value = d2;
        var returnParameter = cmd.Parameters.Add("@ReturnVal", SqlDbType.Int);
        returnParameter.Direction = ParameterDirection.ReturnValue;
        conn.Open();
        cmd.ExecuteNonQuery();
        return returnParameter;
    }
}
catch { }
}

从SQL查询返回参数

您的方法表示它将返回一个十进制,因此无法写入return returnParameter,因为它不尊重方法的签名。

您应该将返回参数的Value属性转换为十进制值

return Convert.ToDecimal(returnParameter.Value);

然而,我对您选择将参数与ParameterDirection.ReturnValue一起使用感到困惑。正如您正确写入(SqlDbType.Int)的那样,这些参数只能返回整数而不能返回小数。也许,您应该考虑使用ParameterDirection.Output的参数,并将其传递到存储过程的调用列表中

当然,如果您真的有一个整数,那么也有可能将方法返回值更改为int。
最后,我强烈建议移除任何空的catch块。当你遇到异常时,这些块是致命的,因为你对它一无所知。