从int列获取值会导致“在'int'和null之间没有隐式转换”错误

时间:2016-03-10 03:49:27

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

所以我试图通过

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等同于那里的答案。

2 个答案:

答案 0 :(得分:3)

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

<!DOCTYPE html>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <title>JS Bin</title>
</head>
<body>
<div class="curationPanel">INSIDE THE PANEL<div class="curationErrors"></div></div>
</body>
</html>

int? AnswerVal = !dataReader.IsDBNull(5) ? dataReader.GetInt32(5) : (int?)null; int之间没有隐式转换,但nullint之间存在隐式转换,使用int?识别类型那个空的。

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

答案 1 :(得分:1)

根据MSDN

  

条件必须评估为真或假。如果条件为真,   first_expression被评估并成为结果。如果条件是   false,second_expression被评估并成为结果。只有一个   评估两个表达式。 两者的类型   first_expression和second_expression必须相同 an   隐式转换必须存在于一种类型之间。

在您的情况下,true语句和false语句具有不同的类型,因此您需要转换它们。正如上面回答中提到的Reza。所以片段将是:

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