我正在使用一个使用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。
答案 0 :(得分:2)
谈论用大锤敲打坚果,但是......
我没有使用C#代码对其进行测试,但在SQL Server Management Studio中,如果您运行...
SELECT MAX(nr2) FROM TABLE WHERE nr1 = '10' HAVING MAX(nr2) IS NOT NULL
,结果是一个空集合,而不是一个带有一个null(或空)元素的集合。
注意:我的答案基于此SO Answer。似乎MAX
和COUNT
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();
}
}
}