如何安全地将可为空的结果从sqlreader转换为int?我有一个包含空值的表,我需要使用SqlDataReader从表中获取数据。我不知道如何安全地将DBNull转换为int。我现在就是这样做的:...reader=command.ExecuteReader();while(reader.Read()){inty=(reader["PublicationYear"]!=null)?Convert.ToInt32(读者["PublicationYear"]):0;...}...但是getObject不能从DBNull转换为其他类型。当PublicationYear为空时。我怎样才能安全地获得价值?谢谢。您应该将reader["PublicationYear"]与DBNull.Value进行比较,而不是null。DBNull与null。你应该尝试这样的事情:inty=(reader["PublicationYear"]!=DBNull.Value)?...您应该明确检查返回值是否为DBNull类型while(reader.Read()){inty=(!reader["PublicationYear"]isDBNull)?Convert.ToInt32(读者["出版年"]):0;...}您实际上可以按值和按类型进行比较:reader["PublicationYear"]!=DBNull.Value简而言之-您可以期望DBNull从数据库返回一个空值,而不是null本身。或者,您可以执行以下操作。当您将DBNull转换为0时,请更改执行选择的进程。这样,选择选项本身会为空值返回零。显示想法的片段SELECT...,ISNULL(PublicationYear,0)asPublicationYear...FROMsometable这样做的好处是代码中不需要额外的检查。将reader["PublicationYear"]!=null更改为reader["PublicationYear"]!=DBNull.Value这是错误的:(reader["PublicationYear"]!=null)你应该测试DBNull.Value....intord=读者。GetOrdinal("出版年份");inty=reader.IsDBNull(ord)?0:阅读器.GetInt32(ord);或者,或者:objectobj=reader["PublicationYear"];inty=Convert.IsDBNull(obj)?0:(整数)对象;将您的测试从(reader["PublicationYear"]!=null)更改为(reader["PublicationYear"]!=DBNull.Value)。数据库空值应该比较DBNull.Valuereader=command.ExecuteReader();while(reader.Read()){inty=(reader["PublicationYear"]!=DBNull.Value)?Convert.ToInt32(读者["出版年"]):0;...}以上就是C#学习教程:Howtosafelyconvertnullableresultsfromsqlreadertoint?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
