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