【问题标题】:Getting value from an int column causes "no implicit conversion between 'int' and null" error从 int 列获取值会导致“'int' 和 null 之间没有隐式转换”错误
【发布时间】:2016-06-24 18:00:35
【问题描述】:

所以我试图通过

INT,而不是INT NOT NULL 列中检索一个值
AnswerVal = !dataReader.IsDBNull(5) ? dataReader.GetInt32(5) : null

AnswerVal 的类型为 int?,我收到编译时错误

无法确定条件表达式的类型,因为 'int' 和 null 之间没有隐式转换

知道这里出了什么问题吗?

是的,我查看了SQL Data Reader - handling Null column values,但我不明白我做错了什么,因为我的内联 if/else 等同于那里的答案。

【问题讨论】:

  • 您是否尝试将表达式显式转换为int?
  • 当列是INT NOT NULL 时,你为什么还要费心检查null。只需制作您的模型int 并完成它
  • 整数? AnswerVal = dataReader.IsDBNull(5) ? (int?)null : dataReader.GetInt32(5);

标签: c# sql asp.net sql-server tsql


【解决方案1】:

你可以通过这种方式获得价值:

int? AnswerVal = !dataReader.IsDBNull(5) ? dataReader.GetInt32(5) : (int?)null; 

intnull 之间没有隐式转换,但 intint? 之间存在隐式转换,并且使用 (int?)null 可以识别该 null 的类型。

当然,当列被定义为非空时,你真的不需要这样的检查。

【讨论】:

  • 您在条件上放弃了!
【解决方案2】:

根据MSDN

条件必须评估为真或假。如果条件为真, first_expression 被评估并成为结果。如果条件是 false,second_expression 被评估并成为结果。只有一个 计算两个表达式中的一个。 无论是哪种类型 first_expression 和 second_expression 必须相同,或者 an 必须存在从一种类型到另一种类型的隐式转换。

在您的情况下,正确的陈述和错误的陈述属于不同的类型,因此您需要转换它们。正如上述答案中提到的Reza。所以 sn-p 将是:

AnswerVal = !dataReader.IsDBNull(5) ? dataReader.GetInt32(5) : (int?)null; 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-14
    • 1970-01-01
    • 2012-03-13
    • 2010-11-19
    • 1970-01-01
    • 1970-01-01
    • 2013-09-01
    • 2019-06-21
    相关资源
    最近更新 更多