我正在尝试将 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();

最佳答案

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();

关于c# - 使用 C# 指定的强制转换无效错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14944254/

10-12 19:15