我在C#中使用下面的SQL语句。
x.reverse()
当由于数据过滤而没有可用行时,它会抛出错误:'对象无法从DBNull转换为其他类型'。我认为它与DATEDIFF部分有问题。我希望它在存在空值时显示值0。它似乎仍然返回一个空值。当有实际行从中提取数据时,代码工作正常。 代码在c#的以下部分中调用:
string ConsultDiff =
@"SELECT AVG(ISNULL(DATEDIFF(DAY, Consult_Date, Start_Date),0))
FROM patients
WHERE progression = 'CO' AND Plan_Type = 'New Patient' " +
Site + " " + Primary_Onc + " " + Type + " " + DateRange + "";
答案 0 :(得分:2)
尝试制作:
var result = cmd3.ExecuteScalar();
int countConsultDiff = Convert.IsDBNull(result) ? 0 : Convert.ToInt32(result);
答案 1 :(得分:2)
您的数据库字段在通过查询返回时会包含SQL NULL值,因为它会抛出异常/错误。您可以检查并使用:DBNull.Value
并且如果它返回Null值则不执行&# 34;选择或执行查询" 。
您需要检查返回的值以确保它不是DBNull。
您也可以通过将变量声明为可空类型来允许null。
答案 2 :(得分:0)
您可以使用COALESCE。 我不确定bothe是否可以为null但是假设只有1将为null,你应该从中得到它。
DATEDIFF(DAY, COALESCE(Consult_Date, StartDate), COALESCE(Start_Date, Consult_Date)
所以在上面,我相信如果eitehr为null,它将与其他值相同,因此DATEDIFF将为零。
希望它有效并且有所帮助