C# 对于SQL计数(*),ExecuteScalar返回false
我有以下函数来检查我的SQL表中是否存在用户C# 对于SQL计数(*),ExecuteScalar返回false,c#,sql,sql-server,sql-server-2008-r2,C#,Sql,Sql Server,Sql Server 2008 R2,我有以下函数来检查我的SQL表中是否存在用户 private static bool userexists(string user) { bool userexists = false; SqlCommand c = new SqlCommand("SELECT COUNT(*) from UserTable where Username = @user"); c.Parameters.Add(new SqlParameter("@user",user));
private static bool userexists(string user)
{
bool userexists = false;
SqlCommand c = new SqlCommand("SELECT COUNT(*) from UserTable where Username = @user");
c.Parameters.Add(new SqlParameter("@user",user));
using (SqlConnection con = new SqlConnection(Properties.Settings.Default.connectionString))
{
userexists = (bool)c.ExecuteScalar();
return userexists;
}
}
它返回false
即使用户存在,我做错了什么?更改此行:
userexists = (bool)c.ExecuteScalar();
为此:
userexists = (int32)c.ExecuteScalar() > 0;
因为您要返回一个数字,所以应该将其强制转换为so,并添加一个条件以获得
bool
结果
userexists = (int) c.ExecuteScalar() > 0;
你可以通过以下方法解决你的问题
userexists = (int)c.ExecuteScalar() > 0.
但是,我对这种做法也持保留态度。您应该检查userid而不是username。多个用户可以具有相同的用户名,而userid将是唯一的。您是否在数据库中执行了相同的语句?它返回什么。我对这种做法也有所保留。您应该检查userid而不是username。多个用户可以有相同的用户名,而userid将是唯一的。另外:在SQL中使用
IF EXISTS()…
方法会有更好的性能。假设您的表中有1亿用户;要检查给定用户的存在,根据您的方法,必须扫描1亿行以计算该用户出现的次数。IF EXISTS()
方法可以在找到匹配的用户后立即停止扫描……输入可能是用户名,因此没有理由更改此查询。函数检查用户是否存在,因此即使存在多个匹配项,它也会执行此任务(尽管我怀疑用户名不是唯一的)
userexists = (int)c.ExecuteScalar() > 0.