使用C#指定的强制转换无效错误

时间:2013-02-18 19:56:04

标签: c# asp.net sql-server-2008

我正在尝试将一个select语句结果存储在C#变量中但是会出现此错误

  

“指定的演员表无效”

当我运行它。我不知道如何解决它请帮助

SqlConnection con1 = new SqlConnection(ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString);

        SqlCommand cmd1 = new SqlCommand("select cast(round(sum(CAST(AvgNumbers AS numeric(12,2))),2) as decimal(12,2)) AS [Average Days] from MainTable ", con1);

        cmd1.Connection = con1;
        con1.Open();
        Int32 result = (Int32)cmd1.ExecuteScalar();
        con1.Close();

4 个答案:

答案 0 :(得分:5)

cmd1.ExecuteScalar()未返回盒装整数。将它分配给一个对象并在调试器中查看它以查看它到底是什么。

我猜它会返回一个Decimal或一个double,你需要这样做:

Int32 result = (Int32)(double)cmd1.ExecuteScalar();

或者:

Int32 result = (Int32)(Decimal)cmd1.ExecuteScalar();

[编辑回复下面提交的问题]

要保留小数值,只需执行以下操作:

Decimal result = (Decimal) cmd1.ExecuteScalar();

如果需要,可以将小数转换为double:

double result = (double)(Decimal) cmd1.ExectuteScalar();

答案 1 :(得分:1)

结果基本上不是Int32。你将它投射到Decimal(12, 2) - 所以我不确定你为什么会这样做。

我的猜测是它要么是double还是decimal - 但是如果你将调用与强制转换分开并查看调试器,那么它应该很明显:

object result = cmd1.ExecuteScalar();
// Now look at the type of the value of result

答案 2 :(得分:1)

你的结果不是Int32,所以你可以使用它;

var result = cmd1.ExecuteScalar();

之后,您可以查看它的类型。或者使用;

object result = cmd1.ExecuteScalar();

也许你可以施展它。请记住,您可以轻松地在调试器中查看它。

答案 3 :(得分:0)

您在SQL中将值转换为十进制,因此请尝试在c#代码中转换为十进制。