我正在尝试将 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/