Priya Karthish Ответов: 2

Скалярная переменная должна быть объявлена.


Я хочу удалить строку из datagrid и datatable. Поэтому я написал следующий процесс, который нужно сделать.
Теперь моя ошибка заключается в том, что скалярная переменная не объявлена. Я буквально не знаю, как это исправить

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

int selectedIndex = datagriduser.SelectedIndex;
               DataRowView rowview = datagriduser.SelectedItem as DataRowView;
               //  string cltyp = rowview["ClientTyp"].ToString();
               var cltyp = "";
               var macadress = "";
               var userkenn = "";
                // OleDbCommand olecmd = new OleDbCommand("DELETE From AktiveUser WHERE User_Kennzeichen = 'nh'", conn);
               string query = "DELETE From AktiveUser WHERE ClientTyp= @cltyp AND MAC_Adresse =  @macadress AND User_Kennzeichen = @userkenn";
               OleDbCommand olecmd = new OleDbCommand(query, conn);
              // olecmd.ExecuteNonQuery();
               // OleDbCommand olecmd = new OleDbCommand("DELETE From AktiveUser WHERE User_Kennzeichen = 'nh'", conn);
               olecmd.Parameters.AddWithValue(@cltyp, rowview["ClientTyp"].ToString());
               olecmd.Parameters.AddWithValue(@macadress, rowview["Arbeitsplatz"].ToString());
               olecmd.Parameters.AddWithValue(@userkenn, rowview["Anmeldung"].ToString());
               if (selectedIndex != -1)
               {
                   var deletedrow = dbtable.Rows[selectedIndex];
                   deletedrow.Delete();
                   oleda.DeleteCommand = olecmd;
                   oleda.Update(dbtable);
               }
               else
               {
                   System.Windows.MessageBox.Show("Please Select a row to Delete");
               }

2 Ответов

Рейтинг:
2

Thomas Daniels

Вы не поставили кавычки @cltyp и два других, так что теперь это просто относится к ценности самого cltyp переменная - это пустая строка. Ставить в кавычки @cltyp, @macadress и @userkenn.


Priya Karthish

одиночная цитата обряд

Priya Karthish

Я попробовал поставить и одинарную, и двойную кавычки. Это все еще не работает

Richard Deeming

Не в запросе - в самом AddWithValue линии.

То, что у вас есть на данный момент, эффективно:

olecmd.Parameters.AddWithValue("", rowview["ClientTyp"].ToString());

Так и должно быть:
olecmd.Parameters.AddWithValue("@cltyp", rowview["ClientTyp"].ToString());

Рейтинг:
12

MadMyche

Здесь у вас есть две ошибки; первая заключается в том, что добавляемые параметры должны быть заключены в двойные кавычки (как указывалось в предыдущих ответах).

Во-вторых, поставщик базы данных OleDB не поддерживает именованные параметры в самом запросе.
Объект oledbcommand.Свойство Параметров (System.Data.OleDb) | Microsoft Docs[^]

Документация OleDB
Поставщик OLE DB .NET не поддерживает именованные параметры для передачи параметров в инструкцию SQL или хранимую процедуру, вызываемую OleDbCommand, когда CommandType имеет значение Text. В этом случае необходимо использовать заполнитель вопросительного знака (?).


Попробуйте внести эти изменения в вашу проблему
string query = "DELETE From AktiveUser WHERE ClientTyp= ? AND MAC_Adresse =  ? AND User_Kennzeichen = ?";
OleDbCommand olecmd = new OleDbCommand(query, conn);

olecmd.Parameters.AddWithValue("@cltyp", rowview["ClientTyp"].ToString());
olecmd.Parameters.AddWithValue("@macadress", rowview["Arbeitsplatz"].ToString());
olecmd.Parameters.AddWithValue("@userkenn", rowview["Anmeldung"].ToString());


Priya Karthish

Спасибо. Это действительно хорошо сработало. Я весь день бил себя по голове

MadMyche

Пожалуйста