Bor*_*oda 2 c# sql clr stored-procedures
我是新手.我正在编写一个clr存储过程,它调用另一个存储过程来获取计算中使用的值.
存储过程返回int(我猜SqlInt32?表中的值的类型是int),然后需要将其转换为decimal.
这是我的代码:
public static int CalculateMyValues(SqlDecimal aMyValue, SqlString aMyValueType, out SqlDecimal aResult)
{
aResult = 0;
try
{
SqlConnection conn = new SqlConnection("context connection=true");
SqlCommand cmd = new SqlCommand("sp_GetType", conn);
cmd.Parameters.AddWithValue("@myValueType", aMyValueType);
cmd.CommandType = CommandType.StoredProcedure;
conn.Open();
object type = cmd.ExecuteScalar();
conn.Close();
decimal typeForCalculation = Convert.ToDecimal(type);
decimal value = Convert.ToDecimal(aMyValue); // **
Calculations calc = new Calculations();
decimal result = calc.DoCalculation(typeForCalculation, value);
Run Code Online (Sandbox Code Playgroud)
我得到一个例外(我认为看到******):
无法将类型为"System.Data.SqlTypes.SqlDecimal"的对象强制转换为"System.IConvertible".
有任何想法吗?谢谢.
问题是Sql类型没有实现IConvertible接口,这是什么Convert用途.你需要转换type为a SqlDecimal,然后使用该Value属性来获取decimal表示:
decimal typeForCalculation = ((SqlDecimal)type).Value;
decimal value = aMyValue.Value;
Run Code Online (Sandbox Code Playgroud)