C# 对于SQL计数(*),ExecuteScalar返回false

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));

我有以下函数来检查我的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));
    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.