C # ADO.NET Параметризованный запрос - PullRequest
0 голосов
/ 31 января 2019

У меня есть T-SQL и запрос:

string queryString = @"SELECT AGENT.Number, PERSON.LoginName, AGENT.EnterpriseName FROM Agent AGENT INNER JOIN Person PERSON ON AGENT.PersonID = PERSON.PersonID WHERE LOWER(EnterpriseName) LIKE @entname";

string connStr = null;

try
{
    connStr = ConfigurationManager.ConnectionStrings["DB"].ConnectionString + ToInsecureString(Decrypt(ConfigurationManager.AppSettings["admin"])) + ";";
}
catch (Exception ex)
{
    Logs.WriteMessage("Error while making connStr " + ex.TargetSite + ex.StackTrace + ex.ToString());
}

try
{
    using (SqlConnection connection = new SqlConnection(connStr))
    {
        connection.Open();

        using (SqlCommand command = new SqlCommand(queryString, connection))
        {
            SqlParameter param = new SqlParameter
                    {
                        ParameterName = "@entname",
                        Value = "'%" + agentName + "%'"
                    };
            command.Parameters.Add(param);

            using (SqlDataReader reader = command.ExecuteReader())
            {
                while (reader.Read())
                {
                    login = (string)reader[1];
                    userID = (string)reader[0];
                }
            }
        }

        connection.Close();
    }
}

И это не работает.Я не получаю никакого результата, но когда я использую значение в запросе вместо @parameter, я получаю правильный результат.

Параметр @entname не заменяется значением, поэтому запрос не выполнен.Пожалуйста, дайте мне подсказку.

Когда я останавливаюсь на точке останова и вижу запрос, он выглядит так:

SELECT AGENT.Number, PERSON.LoginName, AGENT.EnterpriseName 
FROM Agent AGENT 
INNER JOIN Person PERSON ON AGENT.PersonID = PERSON.PersonID 
WHERE LOWER(EnterpriseName) LIKE @entname

Так что ничего не изменилось.

1 Ответ

0 голосов
/ 31 января 2019

Параметр @entname не заменяется на значение, поэтому запрос не выполнен.

Это не так, как работают параметры.Маркер параметра @entname остается в запросе, отправляемом на SQL Server, вместе с соответствующим значением параметра.

Итак, с этим недоразумением вы цитируете значение параметра, как будто оно будет вставлено в SQL-запрос:

Value = "'%" + agentName + "%'"

, что вам не следует делать.Вместо этого сделайте

Value = "%" + agentName + "%"
...