BrogP Ответов: 3

Проблема с SQL delete row (C#)


У меня есть проблема weir с моей базой данных, потому что я не могу удалить последнюю строку, но когда я запускаю тот же instuoction в SQL, он отлично работает мой код:
public void DeleteLastRowClovekData()
        {
            SqlConnection cnn;
            string databaseName = "[MydatabaseName]";
            string connection_string = Helper.GetInfo("[MYlinkForConnectionString]");
            string del;
            del = "DELETE FROM " + databaseName + " WHERE Id = (SELECT MAX(Id) FROM "       + databaseName + " )";
            cnn = new SqlConnection(connection_string);
            SqlCommand cursor = new SqlCommand(del, cnn);
            cnn.Open();
            cursor.ExecuteNonQuery();
            cnn.Close();
        }


Кстати: есть 10 колонок.

Что я уже пробовал:

Я пробовал этот код, воссоздавая таблицу, и я пробовал Reader query, но, похоже, ничего не работает. И этот код:
SqlConnection cnn;
            string databaseName = "[MYdatabaseName]";
            string connection_string = Helper.GetInfo("[MylinkForConnectionString]");
            string del;
            del = "DELETE FROM " + databaseName + " WHERE Id = (SELECT MAX(Id) FROM " + databaseName + " )";
            cnn = new SqlConnection(connection_string);
            SqlCommand cursor = new SqlCommand(del, cnn);
            SqlDataReader Reader;
            cnn.Open();
            Reader = cursor.ExecuteReader();
            while (Reader.Read())
            {
            }
            cnn.Close();

3 Ответов

Рейтинг:
27

OriginalGriff

Почему вы пытаетесь использовать ридер? Там нечего читать - команда DELETE не возвращает никаких строк, так что она, вероятно, создает исключение.

Используйте ExecuteNonQuery, и Ваша проблема должна просто исчезнуть.


BrogP

Я не использовал reader в первом случае, и он также не работает.

OriginalGriff

"это не работает", вероятно, самый бесполезный отчет о проблеме, который мы получаем - и мы получаем его много. Она ничего не говорит нам о том, что происходит или когда это происходит.
Итак, расскажите нам, что он делает, чего вы не ожидали, или не делает, что вы сделали.
Расскажите нам, что вы сделали, чтобы это произошло.
Сообщайте нам о любых сообщениях об ошибках.
Расскажите нам, на что вы смотрели, чтобы узнать, почему!

BrogP

Я его уже починил. Спасибо за попытку помочь Тхо :)

MadMyche

Каково же было решение?

Maciej Los

5ed!

Рейтинг:
16

Maciej Los

В дополнение к решению № 1...

Эта команда:

del = "DELETE FROM " + databaseName + " WHERE Id = (SELECT MAX(Id) FROM " + databaseName + " )";

является весьма опасный!
Вы можете потерять все свои данные! Пожалуйста, прочтите об этом Инъекция SQL - SQL Server | Microsoft Docs[^]

Вы не должны использовать сцепленные строки. Вы должны использовать параметризованные запросы, см.: Использование параметров для запросов SQL Server и хранимых процедур[^]


Рейтинг:
12

Simon_Whale

Первое, что я бы предложил

Цитата:
дель = "удалить из" + имя + "где ID = (выберите Max(ID) из" + имя + " )";


поместите точку останова на эту линию и проверьте, какое значение del присвоил ей.

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