来自 ExecuteScalar() 的 nullreferenceException

问题描述 投票:0回答:1

这里我真的不知道该写什么。我只是在编码,这件事就发生了。

connection.Open();
SqlCommand cmd = connection.CreateCommand();
cmd.CommandText = "select count(*) from Categories where Name = @Name group by CategoryID";
cmd.Parameters.AddWithValue("@Name", categoryName);
int count = (int)cmd.ExecuteScalar();

它的错误在

int count = (int)cmd.ExecuteScalar();

我期望它返回值 1,因为类别表中有 1 行。然而,它只是抛出异常。

c# sql nullreferenceexception sqlclient
1个回答
1
投票

如果没有类别与您的过滤器匹配,则返回

null
而不是 0。然后您将
null
转换为
int
,这会导致 NRE。所以你必须处理这个问题:

object result = cmd.ExecuteScalar();
int count =  result == null || result == DBNull.Value ? 0 : (int) result;

也许您可以将其添加到扩展中以避免忘记这一点:

public static class SqlCommandExtensions
{
    public static int ExecuteScalarToInt(this SqlCommand cmd)
    {
        object result = cmd.ExecuteScalar();
        return result == null || result == DBNull.Value ? 0 : (int)result;
    }
}

现在很容易使用:

int count =  cmd.ExecuteScalarToInt();
© www.soinside.com 2019 - 2024. All rights reserved.