Этот способ использования SQLParameter сделает мою функцию доказательством SQL-инъекции? - PullRequest
0 голосов
/ 07 марта 2019

Вот несколько простых кодов, которые ищут значение в TargetColumn, где SourceColumn = SourceValue.

Вот эти коды:

        string cmdText = "select * from " + TableName + " where " + SourceColumn + " = '" + SourceValue + "'";
        SqlCommand dbCommand = new SqlCommand(cmdText, dbConnection);
        SqlParameter sqlParam = new SqlParameter("@" + SourceColumn,  SourceValue);
        dbCommand.Parameters.Add(sqlParam);
        SqlDataReader dbReader = dbCommand.ExecuteReader();
        dbReader.Read();
        string _targetValue = dbReader[TargetColumn].ToString();
        dbReader.Close();
        dbCommand.Dispose();
        return _targetValue;

И мои вопросы:

  1. Я передал SourceColumn и SourceValue в SqlCommand с помощью SqlParameter, это сделает это доказательством SQL-инъекций?
  2. Нужно ли использовать TargetColumn вместе с SqlParameter для безопасности SQL?(но это для SqlDataReader)
  3. Если я использую SqlParameter для SqlCommand, мне все равно нужно составить текст команды в строку и передать его в SqlCommand, прежде чем использовать SqlParameter?
  4. ПочемуМне нужно добавить «@» для SourceColumn?(Я просто следовал учебнику и добавил его) И почему SourceValue не нужен знак "@"?

Приведенные выше коды хорошо работают для возврата ожидаемого значения, но я не уверен насчетвопросы выше.

Большое спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...