Неправильный синтаксис SQL рядом с «G» в чем проблема? - PullRequest
0 голосов
/ 22 марта 2019

У меня есть SQL-запрос, созданный путем вставки значений из C #.

В C #:

string command = "INSERT INTO Phones (devicename, batterylife, price, antutu, ImageURL) 
                  VALUES (" + model + ", " + batterylife + ", " + price + ", " + antutu + ", " + imgURL + " )";

В SQL после разбора:

INSERT INTO Phones (devicename, batterylife, price, antutu, ImageURL) 
VALUES ( Samsung-Galaxy-S10-5G, 0, 0, 0, 
         cdn2.gsmarena.com/vv/bigpic/samsung-galaxy-s10-5g.jpg )

и при попытке выполнить Visual Studio выдает следующее исключение:

System.Data.SqlClient.SqlException
HResult = 0x80131904
Сообщение = неправильный синтаксис рядом с 'G'.
Источник = .Net SqlClient Data Provider

Также, когда я заменяю обычную переменную имени модели словом Visual Studio выдает то же исключение для маленьких g без помощи определения местоположения.

1 Ответ

0 голосов
/ 22 марта 2019

Как уже указывали другие, вы используете конкатенацию строк для построения своей команды SQL, которая включит SQL-инъекцию в ваш код.

Пожалуйста, используйте вместо этого следующий шаблон, который опирается на параметры и поэтому не восприимчив кэта атака:

using System.Data.SqlClient;
using System.Data;
...
using (var cn = new SqlConnection("YourConnectionString"))
{
    cn.Open();

    using (var cm = cn.CreateCommand())
    {
        cm.CommandType = System.Data.CommandType.Text;
        cm.CommandText =
            "INSERT INTO Phones (devicename, batterylife, price, antutu, ImageURL) " +
            "VALUES (@devicename, @batterylife, @price, @antutu, @ImageURL)";

        cm.Parameters.Add("@devicename", SqlDbType.VarChar, 50).Value = "Samsung-Galaxy-S10-5G";
        cm.Parameters.Add("@batterylife", SqlDbType.Int).Value = 0;
        cm.Parameters.Add("@price", SqlDbType.Int).Value = 0;
        cm.Parameters.Add("@antutu", SqlDbType.Int).Value = 0;
        cm.Parameters.Add("@ImageURL", SqlDbType.VarChar, -1).Value = "cdn2.gsmarena.com/vv/bigpic/samsung-galaxy-s10-5g.jpg";

        cm.ExecuteNonQuery();
    }
}

Вы должны настроить размер / тип каждого SqlParameter по мере необходимости.

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