当我什么都得不到时却得到空洞的答案
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。似乎 MAX
和 COUNT
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();
}
}
}
我正在开发一个使用 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。似乎 MAX
和 COUNT
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();
}
}
}