Я получаю сообщение об ошибке «Неправильный синтаксис рядом с ключевым словом ‘where’ «

#sql-server #wpf #syntax-error

#sql-сервер #wpf #синтаксис-ошибка

Вопрос:

Я пытаюсь обновить таблицу SQL Server (подключенную к проекту WPF), и я получаю сообщение

Неправильный синтаксис рядом с ключевым словом WHERE

Что не так в моем коде?

 private void Save_button_Click(object sender, RoutedEventArgs e)
{
    try
    {
        Select("INSERT INTO [dbo].[Users](sumScore, doneLevels) VALUES ('"   ClsGlobal.sumScore   "','"   ClsGlobal.DoneLevels   "') WHERE [userName]= '"   ClsGlobal.userName   "'");
    }
    catch (Exception ex)
    { 
        MessageBox.Show(ex.Message); 
    }
}

public DataTable Select(string selectSQL) 
{
    DataTable dataTable = new DataTable("dataBase");                                                                                         

    SqlConnection sqlConnection = new SqlConnection(@"Data Source =(LocalDB)MSSQLLocalDB; AttachDbFilename = C:UsersAvrahamAppDataLocalMicrosoftMicrosoft SQL Server Local DBInstancesMSSQLLocalDBNew Database.mdf ");

    sqlConnection.Open();                                           

    SqlCommand sqlCommand = sqlConnection.CreateCommand();          
    sqlCommand.CommandText = selectSQL;                            

    SqlDataAdapter sqlDataAdapter = new SqlDataAdapter(sqlCommand); 
    sqlDataAdapter.Fill(dataTable);                                 

    return dataTable;
}
 

Я бы попытался получить [и] или (и) рядом со словом username, но это все равно не сработало.

Комментарии:

1. Как только у вас это заработает, найдите время, чтобы прочитать «sql-инъекционная атака» или «таблицы удаления Бобби».

Ответ №1:

Этот запрос:

 INSERT INTO [dbo].Users
    VALUES ('"   ClsGlobal.sumScore   "','"   ClsGlobal.DoneLevels   "')
   WHERE [userName]= '"   ClsGlobal.userName;
 

Не имеет смысла. INSERT вставляет новые строки, поэтому WHERE не подходит.

Возможно, вы хотите UPDATE :

 UPDATE dbo.Users
    SET sumScore = ?,
        DoneLevels = ?
    WHERE userName = ?;
 

Вы должны передавать ClsGlobal.sumScore , ClsGlobal.DoneLevels , и ClsGlobal.userName в качестве параметров, а не перегружать строку запроса.

Комментарии:

1. Добавляя, что с помощью SqlClient маркеры параметров называются (например @SumScore ), а не ? .