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

7
使用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);

谢谢你。

感谢您。


为什么不在SQL中使用ISNULL(@Return,0)呢?这样一来,所有的内容都可以转换为Int32。 - user399841
6个回答

12

查看ExecuteScalar的定义。 它返回一个Object对象,如果结果集为空,则该对象将为null引用。

你之所以看到零是因为当传递null给Convert.ToInt32时会返回零。在将其转换为int之前,您需要检查从ExecuteScalar返回的值。


3

DbCommand.ExecuteScalar() 返回第一行的第一列,如果结果为空则返回 null。你遇到的问题是 Convert.ToInt32() 函数会在空值时返回 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
}

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);

0

正如您在这里所看到的,您可以检查结果是否为空:

返回值类型:System.Object 结果集中第一行的第一列,如果结果集为空,则为 null 引用(在 Visual Basic 中为 Nothing)。


0

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

我猜测您的存储过程返回的是计数而不是数据集,这就是为什么您看到了 0 的原因。


0

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接