почему параметризованные запросы обычно выполняются намного быстрее, чем буквальная строка SQL? - PullRequest
1 голос
/ 09 июля 2019

В моем учебнике написано:

"параметризованные запросы обычно выполняются намного быстрее, чем буквальная строка SQL потому что они анализируются ровно один раз (а не каждый раз, когда строка SQL присваивается свойству CommandText). "

Я запутался, допустим, у нас есть метод вставки

public void InsertAuto(Car car)
{
 OpenConnection();
 // Format and execute SQL statement.
 string sql = "Insert Into Inventory (Make, Color, PetName) Values " +
 $"('{car.Make}', '{car.Color}', '{car.PetName}')";
 // Execute using our connection.
 using (SqlCommand command = new SqlCommand(sql, _sqlConnection))
 {
 command.CommandType = CommandType.Text;
 command.ExecuteNonQuery();
 }
 CloseConnection();
}

не правда ли, строковый литерал sql создается один раз и просто?

если вы сделаете это таким образом:

public void InsertAuto(Car car)
{
    OpenConnection();
    // Format and execute SQL statement.
    string sql = "Insert Into Inventory" + "(Make, Color, PetName) Values" + "(@Make, @Color, @PetName)";            // Execute using our connection.
    using (SqlCommand command = new SqlCommand(sql, _sqlConnection))
    {
        SqlParameter parameter = new SqlParameter
        {
            ParameterName = "@Make",
            Value = car.Make,
            SqlDbType = SqlDbType.Char,
            Size = 10
        };
        command.Parameters.Add(parameter);
        parameter = new SqlParameter
        {
            ParameterName = "@Color",
            Value = car.Color,
            SqlDbType = SqlDbType.Char,
            Size = 10
        };
        command.Parameters.Add(parameter);
        parameter = new SqlParameter
        {
            ParameterName = "@PetName",
            Value = car.PetName,
            SqlDbType = SqlDbType.Char,
            Size = 10
        };
        command.Parameters.Add(parameter);
        command.ExecuteNonQuery();
    }
    CloseConnection();
}

где-то еще нужно поменять местами все @ переменные со строковыми значениями?

1 Ответ

0 голосов
/ 09 июля 2019

Поскольку параметризованные запросы относятся к типу sql ... с другой стороны, для литеральной строки SQL требуется время для компиляции, синтаксического анализа, проверки синтаксиса и т. Д. ...

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