【问题标题】:(Sqlite) How would I get the if statement to check all lines of my database?(Sqlite)我如何获得 if 语句来检查我的数据库的所有行?
【发布时间】:2021-06-17 03:14:22
【问题描述】:

我正在制作一个简单的登录系统,目前我正在制作一个方法来检查输入的用户名是否已经存在于数据库中,如果存在则返回 true,否则将返回 false。我目前尝试的代码只检查数据库中的第一行,如果我尝试在数据库中已经存在的第一行下方输入,它仍然会返回 false。我该怎么做才能解决这个问题

 {
     string conn = "URI=file:" + Application.dataPath + "/logindb.db"; 
     IDbConnection dbconn;
     dbconn = (IDbConnection) new SqliteConnection(conn);
     dbconn.Open(); 
     IDbCommand dbcmd = dbconn.CreateCommand();
     string sqlQuery = "SELECT id,username, password " + "FROM user";
     dbcmd.CommandText = sqlQuery;
     IDataReader reader = dbcmd.ExecuteReader();
     while (reader.Read())
     {
         int id = reader.GetInt32(0);
         string usernames = reader.GetString(1);
         string passwords = reader.GetString(2);
         
         if(Username == usernames )
         {
            return true;
           
         }
         else
         {
          return false;
         
         }
     } ``` 

【问题讨论】:

  • 从数据库中读取每条记录绝不是一个好主意(当有 10 个用户时效果很好,但如果有 10,000 个用户呢?)。尝试使用谷歌搜索 SQL WHERE。此外,如果您的系统是多用户系统,请考虑如果 2 个用户尝试同时创建同名帐户会发生什么情况,您的第一个用户的检查会通过,但在创建第二个帐户时会失败。您不应该创建自己的登录系统的原因有很多。
  • 我确实理解这一点,但目的只是为了有 5 个用户,所以这应该不是问题

标签: c# sqlite unity3d


【解决方案1】:

您的代码正在寻找完全匹配的内容。请记住,“Stan”不等于“stan”,“Stan”=“Stan”

不过,我同意 Neil 的观点,因为您总是希望尽可能使用 WHERE 子句来限制搜索。无论您有 5 条还是 5000 条记录,这都是最佳做法。

【讨论】:

    【解决方案2】:

    如果找到匹配项,请将 bool 设置为 true 并跳出循环,然后返回 bool。如果没有匹配,那么它将隐式返回 false。

    不要把它作为一个好的认证系统的模型,它有很大的缺陷

    bool found = false;
    
     while (reader.Read())
     {
         int id = reader.GetInt32(0);
         string usernames = reader.GetString(1);
         string passwords = reader.GetString(2);
         
         if(Username == usernames )
         {
            found = true;           
            break;
         }
     } 
    
     return found;
    

    【讨论】:

    • 不使用bool 变量,只需使用return true;return false; ;)
    • @derHugo,是的,如果您从循环中返回,那不是我演示的方式。我尽量避免返回多个地方,这是一种风格选择。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-07
    • 2020-02-06
    • 2020-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多