无法将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
相关产品推荐
相关产品推荐

