Member 14939365 Ответов: 2

C# удалить строку excel с помощью OLEDB


Как удалить строки из excel с помощью OLEDB? Я попытался удалить из строк 2 [Sheet1$], но это не работает.
Excel ex:
Имя STT
1 а
2 Б
3 с

private void button1_Click(object sender, EventArgs e)
        {
            string a1 = @"Provider=Microsoft.ACE.OLEDB.12.0; Data Source='" + textLoadFile.Text + "';Extended Properties=\"Excel 12.0;HDR=YES;\"";
            using (OleDbConnection conn = new OleDbConnection(a1))
            {
                try
                {
                    //MessageBox.Show(dataGrid["STT", dataGrid.CurrentRow.Index].Value.ToString());
                    conn.Open();
                    OleDbCommand cmd = new OleDbCommand();
                    cmd.Connection = conn;
                    cmd.CommandText = "DELETE FROM [Sheet1$] WHERE STT = 2";
                    cmd.ExecuteNonQuery();
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Error !");
                }
            }
            ReadExceltoDataGrid("Sheet1");
        }


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

Спасибо! https://i.stack.imgur.com/RMCQd.png

2 Ответов

Рейтинг:
2

Pete O'Hanlon

Вы не можете удалить строки в Excel с помощью OleDb. Вы можете вставлять и обновлять строки, но удаление не допускается. Если ваше приложение не работает на сервере, вы всегда можете использовать Excel interop для удаления строки, но не через OleDb.


Рейтинг:
0

Maciej Los

В дополнение к решению Пита О'Хэнлона я бы посоветовал прочитать это: Невозможно обновить или удалить данные в связанной таблице - Office | Microsoft Docs[^]

Старая версия документации MSDN получила эту информацию:

УДАЛИТЬ
Вы более ограничены в удалении данных Excel, чем данные из реляционного источника данных. В реляционной базе данных "строка" не имеет никакого значения или существования, кроме "записи"; в листе Excel это неверно. Вы можете удалить значения в полях (ячейках). Однако вы не можете:

  • Удалите всю запись сразу или вы получите следующее сообщение об ошибке:
    Удаление данных в связанной таблице не поддерживается этим ISAM.
    Удалить запись можно только путем удаления содержимого каждого отдельного поля.
  • Удалите значение в ячейке, содержащей формулу Excel, или появится следующее сообщение об ошибке:
    В этом контексте операция не допускается.
  • Вы не можете удалить пустые строки электронной таблицы, в которых находились удаленные данные, и ваш набор записей будет продолжать отображать пустые записи, соответствующие этим пустым строкам.

А новый - нет. Я понятия не имею, почему MS решила удалить такой контент.

Чтобы обойти эту проблему, обновите свою модель, добавив новое поле, содержащее логические значения (true/false или Yes/No или 0/1). Например:
STT
Name
Deleted (or Active)


Затем вместо удаления строки вы можете пометить ее как удаленную:
UPDATE [Sheet1$] SET Deleted = True


;)

Удачи вам!