You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法将System.DBNull转换为System.Int32类型的报错求助

问题原因分析

报错Unable to cast object of type 'System.DBNull' to type 'System.Int32'的核心原因是:你从数据库读取的第2列(LikesxPublicacion.Publicacion)存在NULL值,直接强转成int类型时,DBNull无法转换为数值类型,导致抛出异常。

解决方案

以下三种方法任选其一,根据业务需求选择:

方法1:在C#代码中处理NULL值

读取数据时先判断是否为DBNull,给NULL值设置符合业务逻辑的默认数值(比如0):

while (reader.Read())
{
    string userName = reader[0].ToString();
    // 检查第2列是否为NULL,是则用0替代,否则强转为int
    int publicationCount = reader.IsDBNull(1) ? 0 : (int)reader[1];
    DownUsersList.Add(new KeyValuePair<string, int>(userName, publicationCount));
}

方法2:修改SQL语句,在查询时替换NULL值

使用SQL的ISNULL函数(SQL Server)把NULL值替换为默认值,确保返回结果中没有NULL:

SELECT Usuario.Uname 'Usuario', 
       -- 把Publicacion字段的NULL替换为0,可根据业务调整默认值
       ISNULL(LikesxPublicacion.Publicacion, 0) AS Publicacion,
       Fotos,Videos,Comentarios,Likes,PublicationDate 
FROM Usuarios Usuario 
INNER JOIN Publicaciones LikesxPublicacion 
ON Usuario.UID = LikesxPublicacion.PID 
WHERE Likes <= 1000

修改后原代码的强转逻辑无需改动即可正常运行。

方法3:从数据库结构层面避免NULL

如果Publicacion字段在业务逻辑中不允许为NULL,直接修改数据库表结构,将该字段设置为NOT NULL并指定默认值(比如0),从根源杜绝NULL值的出现。


内容的提问来源于stack exchange,提问作者Pedro Nuñez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 08:15:32