Chiranthaka Sampath Ответов: 3

Как удалить запись таблицы SQL с помощью предложения C# & SQL WHERE


Всем Привет,

Я хочу удалить запись таблицы sql с помощью C#. Я уже пробовал приведенный ниже фрагмент кода, но он не сработал. Однако сообщение показывает " запись данных удалена!", как и должно быть. Я также не могу найти проблемы в этом заявлении.

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

private void btnDeleteData_Click(object sender, EventArgs e)
       {
           try
           {

               SqlComm = new SqlCommand("DELETE FROM MyDataTable WHERE DataID='@DataID'", SqlConn);
               SqlComm.Parameters.AddWithValue("@DataID", txtDataID.Text);
               SqlComm.ExecuteNonQuery();
               MessageBox.Show("Data record deleted!", "DB Connection With App.Config", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);

               Clear();
               DisableButtons();
           }
           catch (Exception ex)
           {
               MessageBox.Show(ex.Message);
           }
       }


Не мог бы кто-нибудь попытаться решить этот вопрос?

Спасибо и с уважением,
Чирантхака

3 Ответов

Рейтинг:
23

OriginalGriff

Код выглядит нормально, поэтому наиболее вероятным является то, что предложение WHERE не соответствует ни одной строке.
Начните с проверки количества строк, на которые влияет команда: ExecuteNonQuery возвращает это значение:

SqlComm.Parameters.AddWithValue("@DataID", txtDataID.Text);
int deleted = SqlComm.ExecuteNonQuery();
MessageBox.Show(string.Format("{0} rows deleted.", deleted), "DB Connection With App.Config", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
Если это указывает на ноль, то используйте отладчик, чтобы точно проверить, что находится в txtDataId, и вручную проверьте БД на наличие точных совпадений с помощью SSMS.


Chiranthaka Sampath

Привет OriginalGriff,

Спасибо за фрагмент. Вы были правы, мое заявление не повлияло на стол. Так что я снова заглянул в инструкцию SQL и обнаружил, что проблема именно в ней. Ниже приведен обновленный оператор SQL.

SqlComm = new SqlCommand("DELETE FROM MyDataTable WHERE DataID LIKE @DataID", SqlConn);

Спасибо за вашу помощь!

OriginalGriff

Всегда пожалуйста!

Рейтинг:
2

Member 14519849

добавьте это: SqlComm.CommandType = CommandType.Текст после SqlComm.Parameters.AddWithValue("@DataID", txtDataID.Text). это должно решить вашу проблему.


CHill60

В любом случае это значение по умолчанию, так что это не решило бы проблему OPs - которая была решена путем корректировки предложения WHERE - см. комментарии к решению 1 от августа 2017 года

Рейтинг:
2

Member 14732900

Привет. У меня была та же проблема. Мое решение: строке DelQuery = "удалить с преподавателем, где имя пользователя=имя пользователя";

Поэтому я удалил " from '@UserName'.

Теперь работает отлично!


CHill60

Во-первых, в вашем запросе нет "from '@UserName'". Если вы имели в виду, что удалили "where Username=@UserName", то вы будете удалять все содержимое вашей таблицы Tutor. Ваша проблема, вероятно, была такой же, как и у OPs - в @UserName не было ничего подходящего, поэтому удалять было нечего.
Все, что вы здесь сделали, - это продемонстрировали, что вы не знаете, как работают предложения "где".