gpt4 book ai didi

C# MySQL 求和 InvalidCastException

转载 作者:可可西里 更新时间:2023-11-01 08:34:11 24 4
gpt4 key购买 nike

我有一个查询,我在其中尝试获取总和值,但我得到了 InvalidCastException。

我的查询是:

SELECT e.clockNr,e.firstName,e.LastName,e.unionName,i.points 
FROM (
SELECT employee.clockNr AS clockNr,
employee.firstName AS firstName,
employee.lastName AS lastName,
Unions.name AS unionName
FROM employee,Unions
WHERE employee.active=1 AND employee.unionId = unions.id
GROUP BY employee.clockNr
) e LEFT JOIN (
SELECT infraction.clockNr AS clockNr,
CAST(SUM(Infraction.points) AS SIGNED) AS points
FROM infraction
WHERE infraction.infractionDate >=@startDate
AND infraction.infractionDate <=@endDate
GROUP BY infraction.clockNr
) i ON e.clockNr = i.clockNr
ORDER BY e.clockNr ASC

它是错误的'点数'列。我已将 CAST 添加到 SIGNED,但这没有帮助。

我读专栏的方式是:

int iGetPoints = Convert.ToInt32(reportReader["points"]);

还试过:

int iGetPoints = (int)reportReader["points"];

但两者都会引发 InvalidCastException。该查询已在 PHPMyAdmin 中进行测试并且可以正常工作。

任何人都可以看到我做错了什么或给我提示在哪里寻找吗?

最佳答案

因为 points 列是左连接的一部分,所以它可以为空。我假设这就是问题所在。您需要测试 null 以避免强制转换异常:

// Note: this is for DataTableReader; see below for MySQL data reader
int iGetPoints = 0;
if (!reportReader.IsDBNull(reportReader.DBOrdinal("points"))) {
iGetPoints = Convert.ToInt32(reportReader["points"]);
}

IsDBNull 方法需要列名的索引(它不会与名称一起使用),因此调用 DBOrdinal 以从名称中获取索引.


注意:上面的答案适用于“通用”System.Data.DataTableReader 类,但不适用于 MySQL 数据读取器。 Gerard 在下面的评论中发布了 MySQL 读者所需的更改。它们是:

int iGetPoints = 0;
if (reportReader["points"] != DBNull.Value) {
iGetPoints = Convert.ToInt32(reportReader["points"]);
}

关于C# MySQL 求和 InvalidCastException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18132481/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com