【发布时间】:2012-11-23 10:35:22
【问题描述】:
在我网站的某个区域,我需要控制对一组特定用户的访问。
这是通过对照 SQL Server 数据库上的表检查用户 ID 来完成的。如果 ID 存在,则授予他们访问权限:
SELECT 1 FROM admin WHERE userID = @userID
我注意到有几种方法可以检查数据库中是否存在行,并且想知道使用其中任何一种是否有任何好处,或者是否有标准。
首先是通过检查SqlDataReader中是否存在行:
if (!SqlCommand.ExecuteReader().HasRows)
{
//redirect
}
第二种是使用ExecuteScalar()检查返回值是否为DBNull:
if (SqlCommand.ExecuteScalar() is DBNull)
{
//redirect
}
我应该使用哪个?有没有更好的办法?真的很重要吗?
【问题讨论】:
-
我认为后者更可取,因为您只需要
true或false。前者会创建一堆你不会利用的对象(IE DataReader),那么为什么要添加这个结构开销呢? -
另一个可能更具可读性:
SELECT CASE WHEN EXISTS(SELECT 1 FROM admin WHERE userID=@userID) THEN 1 ELSE 0 END AS IsAdmin。然后你可以使用:bool isAdmin = reader.GetBoolean(0);.