2016-09-29 9 views
0

私は私の会社のための小さなアプリケーションを作っていますが、ユーザーがログインして特定のデータにアクセスできるようにしていますが、サーバーサイドではデータベースを照会してMySqlDataReaderは読み取りません。次のコード:MySqlDataReader does not read

public string HandleLogin(string uname, string pwd) 
    { 
     MySqlDataReader READER; 
     int count = 0; 
     int clearance = 0; 
     if (uname == "" || pwd == "") 
      return ""; 
     CONN = new MySqlConnection(); 
     CONN.ConnectionString = Config.CONNSTRING; 
     string query = "select * from members where username='" + uname + "' and password='" + pwd + "'"; 
     try 
     { 
      CONN.Open(); 
      COMMAND = new MySqlCommand(query, CONN); 
      READER = COMMAND.ExecuteReader(); 
      while(READER.Read()) 
      { 
       count = count + 1; //<-- this should happen, but it doesnt 
       if (count == 1) 
        clearance = READER.GetInt32("clearance"); 
       else 
        return ""; 
      } 
      if (count == 1) 
       return Convert.ToString(clearance); 
      else 
       return ""; 
     } 
     catch(Exception ex) 
     { 
      Console.WriteLine(ex.Message); 
      return ""; 
     } 
     finally 
     { 
      CONN.Dispose(); 
     } 
    } 

私はそれが0を言ったが、私は、トリプルのすべての値をチェックし、彼らは正確にデータベースの値と一致するが、それはありませんを読み、それが見つかった行の量を求め、1行を読んでください確信していますクエリの行これは非常に愚かな間違いかもしれませんが、私は問題を見つけることができません。

+0

SQLのテキストが正しいかどうかを確認してください。 uname/pwd変数内の空白を探します。 – RajN

+0

チェックしましたか、接続は開いていますか? – Clock

+0

@RajNagalingamそれは正しいです、@ devlincarnateパスワードがデータベースにハッシュされ、サーバーがそれを受け取る前に@ SomeUser hmmmありがとう、私は確かにそれを調べます –

答えて

0

だから、私は再びブレークポイントを配置して、変数を再チェック、変数はConsole.WriteLineを持つ良いですが、クエリでは、次のようになります。

"select * from members where username='matthias' and password='M20UjefsltnFCTDsCL1temvFOtBcnN8gNtGbQevVTkkG8jCXZlbxQ3ykOTx0fV4Ls2VnAzOzx2F5CTY+jEDSzg==\0\0\0\0'" 

しかし、それは次のようになります。 "select * from members where username='matthias' and password='M20UjefsltnFCTDsCL1temvFOtBcnN8gNtGbQevVTkkG8jCXZlbxQ3ykOTx0fV4Ls2VnAzOzx2F5CTY+jEDSzg=='"

クライアントとサーバーの間のデータ暗号化とパディングによって\ 0 \ 0 \ 0 \ 0が最後に追加されていますので、これを先に見たことがあります。この関数をクエリの前に追加します。

pwd = pwd.Replace("\0", "");