在我的网站区域中,我需要控制对特定用户集的访问。

这是通过对照SQL Server数据库上的表检查用户ID来完成的。如果该ID存在,则将授予他们访问权限:

SELECT 1 FROM admin WHERE userID = @userID


我注意到,有两种方法可以检查数据库中是否存在行,并且想知道使用这两种方法是否有好处,或者是否有标准。

第一种是通过检查SqlDataReader中是否存在行:

if (!SqlCommand.ExecuteReader().HasRows)
{
    //redirect
}


第二个是使用DBNull检查返回的值是否为ExecuteScalar()

if (SqlCommand.ExecuteScalar() is DBNull)
{
    //redirect
}


我应该使用哪个?有没有更好的办法?真的有关系吗?

最佳答案

第二种选择是因为您的开销较小。
但是请注意

ExecuteScalar返回的对象是


  结果集中第一行的第一列,或者为null
  如果结果集为空,则引用(Visual Basic中为Nothing)


您的查询可能不会返回任何内容,因此最好检查null而不是DBNull

if (SqlCommand.ExecuteScalar() == null)
{
    //redirect
}

09-12 23:25