当我什么也得不到时,得到空洞的答案

时间:2015-04-10 09:26:45

标签: c# sql sql-server-ce

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

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

当有一行nr1为10时,这就像inteneded一样。但是当那行不存在时,我希望得不到答案,而是得到一个空字段。所以在我的C#代码中我有:

text = result[0].ToString();

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

这不是一个大问题,但我可以做以下检查:

if (result.Count > 0)

而不是:

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

此刻我必须这样做,因为count总是大于0。

2 个答案:

答案 0 :(得分:2)

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

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

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

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

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

答案 1 :(得分:2)

该SQL语句将始终返回结果...如果基本查询未返回结果,则max()的值为null!

如果你使用的是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();
        }
    }
}