sqlDecimal到decimal clr存储过程无法将类型为'System.Data.SqlTypes.SqlDecimal'的对象强制转换为'System.IConvertible'

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".

有任何想法吗?谢谢.

the*_*oop 6

问题是Sql类型没有实现IConvertible接口,这是什么Convert用途.你需要转换type为a SqlDecimal,然后使用该Value属性来获取decimal表示:

decimal typeForCalculation = ((SqlDecimal)type).Value;
decimal value = aMyValue.Value;
Run Code Online (Sandbox Code Playgroud)