对象不能从 DBNull 转换为 C# 中的其他类型
Posted
技术标签:
【中文标题】对象不能从 DBNull 转换为 C# 中的其他类型【英文标题】:Object cannot be cast from DBNull to other types in C# 【发布时间】:2022-01-07 20:58:34 【问题描述】:我写了这段代码:
mysqlCommand command1 = new MySqlCommand("SELECT SUM(standard_one) FROM `challenge` WHERE (SELECT DAYOFWEEK(date)=1) AND challenge_id = @challenge_id and username = @username", db.getConnection());
command1.Parameters.Add("@challenge_id", MySqlDbType.Int32).Value = comboBox1.SelectedItem;
command1.Parameters.Add("@username", MySqlDbType.VarChar).Value = globals.username;
问题是有时此命令返回 null。
如何检查命令是否返回 null?如果是,它返回 0?
【问题讨论】:
你可以对照DBNull.Value
进行检查
更多详情请见this question。
【参考方案1】:
如果该命令将返回 null?如果是,它返回 0?
制作 SQL:
SELECT COALESCE(SUM(standard_one), 0) ...
请记住,您将无法区分“没有与 where 子句匹配的值”和“匹配的所有值的总和为 0”。如果这很重要,您要么需要合并到总和中永远不会出现的不同值,例如 -2_147_483_648,要么坚持你所拥有的并在 C# 端检查 null
var x = command1.ExecuteScalar();
if(x == null || x.GetType() == typeof(System.DBNull))
...
else
..cast to int etc..
【讨论】:
以上是关于对象不能从 DBNull 转换为 C# 中的其他类型的主要内容,如果未能解决你的问题,请参考以下文章
无法使用 Visual Basic 代码将对象从 DBNull 转换为其他类型
InvalidCastException:无法将“System.DBNull”类型的对象转换为“System.Nullable`1[System.Int32]”[重复]
尝试使用 COM-interop 从 C# 库中附加 vb6 中的对象时,获取“无法将 'Field' 转换为 'Field' 类型(同一类)”