我正在尝试运行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 { }
}
答案 0 :(得分:6)
你的方法说它会返回一个小数,写return returnParameter
是不可能的,因为它不尊重你方法的签名。
您应该将return参数的Value
属性转换为十进制值
return Convert.ToDecimal(returnParameter.Value);
但是我对使用ParameterDirection.ReturnValue
参数的选择感到困惑。正确编写(SqlDbType.Int
)后,这些参数只能返回整数而不是小数。也许,您应该考虑使用ParameterDirection.Output
的参数,并将其传递给存储过程的调用列表
当然,如果你真的有一个整数,那么也可以将你的方法返回值改为int 最后我强烈建议删除任何空的catch块。当你遇到异常时,这些块是致命的,因为你从来不知道它。