我正在尝试将一个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();
答案 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#代码中转换为十进制。