2017-01-08 10 views
0

私はまだこのゲームでは新しいです。私はそれを確認するためにデータベースからユーザー名とパスワードを選択するのに苦労しています。複数の列を一度に選択するSQL

このコードで実行できることは、ユーザー名を選択することだけです。

私は、ユーザー名とパスワードの両方を選択するためにselectステートメントを変更する必要があります。

public override int SelectUser(string username, ref User user) 
{ 
    int rc = 0; 

    try 
    { 
     _sqlCon = new SQLiteConnection(_conStr); 
     bool bRead = false; 
     user = new User(); 

     _sqlCon.Open(); 

//この選択文字列は、私が苦労している場所です。

 string selectQuery = "SELECT * FROM Users WHERE [uUsername] = ' " + username + " ' "; 

     SQLiteCommand sqlCmd = new SQLiteCommand(selectQuery, _sqlCon); 
     SQLiteDataReader dataReader = sqlCmd.ExecuteReader(); 
     bRead = dataReader.Read(); 
     if(bRead == true) 
     { 
      user.Username = Convert.ToString(dataReader["uUsername"]); 
      user.Password = Convert.ToString(dataReader["uPW"]); 
      rc = 0; 
     }// end if 
     else 
     { 
      rc = -1; 
     }// end else 
     dataReader.Close(); 
    }// end try 
    catch(Exception ex) 
    { 
     throw ex; 
    }// end catch 
    finally 
    { 
     _sqlCon.Close(); 
    }// end finally 
    return rc; 
}// end method 
+1

... ANDパスワード= ....しかし、この全体のアプローチは間違っています。文字列連結を使用してSQLコマンドを作成しないでください。パラメータを使用する – Steve

+0

他に何が必要ですか?私が知っている唯一のことは、文字列の連結です。 –

+0

あなたは私の答えを下に読みましたか? – Steve

答えて

2

あなたは二重の状態を取得するためにWHERE最初の条件にAND logical operatorを追加します。しかし、文字列連結を使用するこの全体のアプローチは間違っています。
ではなく、あなたがこの

string selectQuery = @"SELECT * FROM Users 
         WHERE [uUsername] = @name AND 
          [uPw] = @pass"; 

SQLiteCommand sqlCmd = new SQLiteCommand(selectQuery, _sqlCon); 
sqlCmd.Parameters.Add("@name", DBType.String).Value = username; 
sqlCmd.Parameters.Add("@pass", DBType.String).Value = password; 
SQLiteDataReader dataReader = sqlCmd.ExecuteReader(); 
bRead = dataReader.Read(); 
.... 

のようなパラメータ化クエリを使用して、私はあなたが変数パスワード中に値を持っていることを前提としSql Injection

と呼ばれるバグのよく知られたソースと、大きなセキュリティリスクでありますあなたの実際の状況に変更してください。

また、パスワードをデータベース内にクリアテキストで保存することは、避けるべきセキュリティ上のリスクの1つです。質問Best way to store password in a databaseは、それを行う理由と正しい方法を詳細に説明します

+0

ありがとう、私はこれを使用します。 –

関連する問題