在我的网站区域中,我需要控制对特定用户集的访问。
这是通过对照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
}