当我什么都得不到时却得到空洞的答案

Getting empty answer when I should get nothing

我正在开发一个使用 SQL Server Compact 数据库的 C# 程序。我有一个查询,我想 select 特定字段中的最高数字,如下所示:

SELECT MAX(nr2) FROM TABLE WHERE nr1 = '10'

当有一行 nr1 为 10 时,这会按预期工作。但是当该行不存在时,我希望不会得到答案,而是得到一个空字段。所以在我的 C# 代码中我有:

text = result[0].ToString();

当我从 SQL 查询中获取一个值时,该字符串包含一个数字,而当指定的行不存在时,我得到一个空字符串。

这并不是什么大问题,但我可以进行以下检查:

if (result.Count > 0)

而不是:

if (result[0].ToString() == "")

我现在必须这样做,因为计数总是大于 0。

谈论使用大锤敲碎坚果,但是...

我没有使用 C# 代码对其进行测试,但在 SQL Server Management Studio 中,如果您 运行...

SELECT MAX(nr2) FROM TABLE WHERE nr1 = '10' HAVING MAX(nr2) IS NOT NULL

,结果是一个空集合,而不是一个包含一个 null(或空)元素的集合。

注意:我的回答是基于此SO Answer。似乎 MAXCOUNT SQL 函数 returns 总是单行集合。

SQL 语句将始终 return 结果...如果基本查询 return 没有结果,则 max() 的值为空!

如果您正在使用 ADO.NEt,您可以使用 ExecuteScalar,这里有一个例子:

private int GetIDNum()
{
    SqlConnection connection = new SqlConnection("connectionstring");
    using(SqlCommand command = new SqlCommand("SELECT MAX(nr2) FROM TABLE WHERE nr1 = '10'", connection))
    {
        try
        {
            connection.Open();

            object result = command.ExecuteScalar();

            if( result != null && result != DBNull.Value )
            {
                return Convert.ToInt32( result );
            }
            else
            {
                return 0;
            }
        }
        finally
        {
            connection.Close();
        }
    }
}