Команда вставки MySQL с использованием подготовленного оператора и заполнителей не работает

Я создал базу данных MySql и форму графического интерфейса Windows C # с полями текстового поля и средством выбора даты для заполнения таблицы с именем «задание» в моей базе данных.

Я прочитал несколько сообщений на этом сайте о важности использования подготовленных операторов для предотвращения атак sql-инъекций и попытался использовать эту функцию безопасности в своем коде. Однако это не работает. Я веб-дизайнер, но очень новичок в программировании. Я пробовал разные варианты кода, команда вставки все равно не работает. Примеры, которые я нашел в этой форме, включают использование подготовленных операторов с PHP, что я не использую.

Я получаю следующее сообщение об ошибке: У вас есть ошибка в синтаксисе SQL; проверьте руководство или версию вашего сервера MySQL, чтобы найти правильный синтаксис для использования рядом с 'jobTitle, this.dateTimePickerJobLastUpdated') 'в строке 1

Кто-нибудь знает, что я делаю не так и как это исправить?

Это инструкция MySQL для таблицы.

СОЗДАТЬ задание ТАБЛИЦА (

job_code VARCHAR(6) NOT NULL DEFAULT '',
job_title VARCHAR(30) NOT NULL DEFAULT '',  
    job_last_update DATE NOT NULL, 
    PRIMARY KEY (job_code)

) ДВИГАТЕЛЬ = InnoDB CHARSET = utf8;

И это мой C # для обработчика событий, который сохранит запись данных из формы Windows в базу данных.

private void btnSaveJobsTable_Click (объект-отправитель, EventArgs e) {

        String myConnection = @"server=localhost; database=beautyshopdb; username=$$$$; password=$$$$$$";
        MySqlConnection Connect = null;
        try
        {
            Connect = new MySqlConnection(myConnection);
            Connect.Open(); //open the connection
            //This is the mysql command that we will query into the db.
            //It uses Prepared statements and the Placeholder is @name.
            //Using prepared statements is faster and secure.
            String insertQuery = "INSERT INTO beautyshopdb(job) VALUES(@jobCode, @)jobTitle, @lastUpdated)";
            MySqlCommand cmdInsertJobsToDataBase = new MySqlCommand(insertQuery, Connect);
            cmdInsertJobsToDataBase.Prepare();
            //we will bound a value to the placeholder
            cmdInsertJobsToDataBase.Parameters.AddWithValue("@jobCode", "this.txtEnterJobCode.Text");
            cmdInsertJobsToDataBase.Parameters.AddWithValue("@jobTitle", "this.txtEnterJobTitle.Text");
            cmdInsertJobsToDataBase.Parameters.AddWithValue("@lastUpdated", "this.dateTimePickerJobLastUpdated");
            cmdInsertJobsToDataBase.ExecuteNonQuery(); //execute the mysql command
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
        finally
        {
            if (Connect != null)
            {
                Connect.Close(); //close the connection
            }
        }

}

Спасибо!


person user3629850    schedule 12.05.2014    source источник
comment
Спасибо, Билл !! Я изучил код и исправил обнаруженные вами глюки. Я также нашел пару других синтаксических ошибок и исправил их. Команда INSERT теперь отлично работает как с подготовленными операторами, так и с заполнителями.   -  person user3629850    schedule 13.05.2014


Ответы (1)


Я не разработчик C #, но это выглядит неправильно, я думаю, у вас есть лишняя скобка перед jobTitle:

String insertQuery = "INSERT INTO beautyshopdb(job) VALUES(@jobCode, @)jobTitle, @lastUpdated)";

Также вы, кажется, помещаете ссылки на переменные в кавычки, как если бы они были строковыми константами. Я бы ожидал, что здесь цитаты не потребуются.

cmdInsertJobsToDataBase.Parameters.AddWithValue("@jobCode", "this.txtEnterJobCode.Text");

Должно быть:

cmdInsertJobsToDataBase.Parameters.AddWithValue("@jobCode", this.txtEnterJobCode.Text);
person Bill Karwin    schedule 12.05.2014