使用SQL Command对象,如何检查结果集是否为空?

时间:2009-04-06 17:40:48

标签: c# asp.net sql ado.net

使用SQL Command对象中的ExecuteScalar方法,如何检查结果集是否为空?我正在使用ASP.net,C#和MS SQL 2008.现在,当我运行以下代码时,当结果集为空时,Response.Write返回 0 。但我想区分 0 和空结果集,因为我的数据库中存在实际的 0 值。

以下是当前的代码:

cmd = new SqlCommand("usp_test", cn);
cmd.CommandType = CommandType.StoredProcedure;

cn.Open();
TestOuput = Convert.ToInt32(cmd.ExecuteScalar());
cn.Close();

Response.Write(TestOutput);

谢谢。

6 个答案:

答案 0 :(得分:12)

查看ExecuteScalar的定义。它返回一个Object,如果结果集为空,它将具有空引用。

您看到零的原因是Convert.ToInt32在给定null时返回零。在将其转换为ExecuteScalar之前,您需要检查int的返回值。

答案 1 :(得分:3)

DbCommand.ExecuteScalar()返回第一行的第一列,如果结果为空,则返回null。你的问题是由Convert.ToInt32()引起的,因为它为null返回0。

你必须检查ExecuteScalar()返回的值为null,如果它不为null,则只调用Convert.ToInt32()。

Object result = command.ExecuteScalar();

if (result != null)
{
   Int32 value = Convert.ToInt32(result);
}
else
{
   // Handle the empty result set case
}

答案 2 :(得分:0)

如您所见[{3}},您可以检查结果是否为空:

  

返回值类型:System.Object   第一行的第一列   结果集或空引用   (如果没有Visual Basic中的任何内容)   结果集为空。

答案 3 :(得分:0)

执行标量将返回结果集中第一行的第一列。如果没有结果,则应返回null。

我的猜测是你的存储过程正在返回一个计数而不是数据集,这就是你看到0的原因。

答案 4 :(得分:0)

如果结果集为空,则

ExecuteScalar会返回null(如@fallen888,等等)。您看到零的原因是Convert.ToInt32在给定null时返回零。在将其转换为ExecuteScalar之前,您需要检查int的返回值。

答案 5 :(得分:0)

cmd = new SqlCommand("usp_test", cn);
cmd.CommandType = CommandType.StoredProcedure;
cn.Open();
Object outPut=cmd.ExecuteScalar();
if(outPut!=null)
TestOuput = Convert.ToInt32(outPut);
else
//Return Empty Set
cn.Close();

Response.Write(TestOutput);