Подтвердить что ты не робот

ExecuteNonQuery возвращает значение 0 при успешном удалении записи

У меня есть небольшая проблема в моем коде С# в Asp.net при удалении строки из SQL-сервера. Я использую ExecuteNonQuery, чтобы определить, какое сообщение я передаю на страницу. Если ExecuteNonQuery возвращает 1, я показываю сообщение об успешном завершении. Когда я застреваю, у меня есть та же логика для добавления записи и обновления записи, и мой код отлично работает. Ниже приведен код.

private void Delete_row(string ImageId)
    {
        string sSQL = "delete FROM dbo.Image_library_UK_temp where Image_id=" + ImageId;
        using (SqlConnection dbConnection = new SqlConnection(app_settings.sql_conn_string_db))
        {
            try
            {

                //delete the row from db
                dbConnection.Open();
                SqlCommand command = new SqlCommand(sSQL, dbConnection);
                command.CommandType = CommandType.Text;
                command.CommandTimeout = 1024;
                command.ExecuteNonQuery();

                int rowsAffected = command.ExecuteNonQuery();
                if (rowsAffected == 1)
                {

                    messagepanel1.ShowSuccessMessage("The image " + txtImgTitle.Text + "has been deleted from the system.");
                    DisableValidation();
                }

            }
            catch (Exception ex)
            {
                messagepanel1.ShowErrorMessage("Error: Deletion unsuccessful");
            }

            Session.RemoveAll();
            generateTable(false);

        }
    }

В настоящее время отраженные строки возвращаются 0. Это простой оператор SQL, поэтому мой sql жестко закодирован на С#, и я не использую хранимую процедуру.

Любые идеи, как я могу сделать эту работу?

4b9b3361

Ответ 1

Вы выполняете команду дважды.

command.ExecuteNonQuery();
int rowsAffected = command.ExecuteNonQuery();

Первая строка удалит строку и вернет 1, но вы проигнорируете возвращаемое значение. Вторая строка снова выполнит оператор DELETE, но ничего не удалит, потому что больше нет строк, удовлетворяющих данному условию; таким образом, rowsAffected будет равно нулю.

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