Что не так с кодом C# переноса данных из таблицы в таблицу?

Devostator

Client
Регистрация
17.09.2011
Сообщения
273
Благодарностей
28
Баллы
28
Здравствуйте. Подскажите пожалуйста. Что не так с кодом?

Баг или я что-то делаю не так?

1. Очищаю предварительно таблицу на случай если в ней что-то было.
2. Заношу путь к файлу в переменную.
(тут ещё определяю путь к файлу бэкапа, на скриншоте не отмечено).
3. Привязываю таблицу к файлу (через переменную п.2).
4. Переношу из локального файла (таблицы) в другой локальный файл (таблицы).

122641

Код по логу отрабатывает нормально:

Пишет что перенеслось ровно столько строк сколько в файле исходнике.

Однако открываю файл-бэкап, а там 2000 строк вместо 3553. Иногда меньше иногда больше.

Почему так? И как можно поправить? Спасибо.

Код ниже:

C#:
var table1 = project.Tables["DBBT - База площадок Tier1shop (LOCAL)"];
var table2 = project.Tables["DBBT - База площадок Tier1shop (LOCAL)_backup"];
string backupFilePath = project.Variables["name_for_backupfile"].Value;
string localFilePath = project.Variables["way_to_bind_dbbts_table"].Value;


try {
    // Привязка table2 к файлу
    table1.Bind(localFilePath);
    table2.Bind(backupFilePath);
    project.SendInfoToLog("Привязка к файлу выполнена: " + backupFilePath);

    // Очистка table2
    table2.Clear();
    project.SendInfoToLog("Таблица table2 очищена.");

    // Проверка данных в table1 перед переносом
    project.SendInfoToLog("Количество строк в table1 перед переносом: " + table1.RowCount);

    // Перенос данных из table1 в table2
    for (int i = 0; i < table1.RowCount; i++) {
        var row = table1.GetRow(i)?.ToArray();
        if (row != null) {
            table2.AddRow(row);
        } else {
            project.SendInfoToLog($"Строка {i} в table1 является null");
        }
    }
    project.SendInfoToLog("Данные перенесены из table1 в table2.");

    // Отладка: проверка количества строк в table2
    project.SendInfoToLog("Количество строк в table2_backup после переноса: " + table2.RowCount);

    // Сохранение данных вручную
    using (StreamWriter writer = new StreamWriter(backupFilePath, false, Encoding.UTF8)) {
        for (int i = 0; i < table2.RowCount; i++) {
            var row = table2.GetRow(i);
            writer.WriteLine(string.Join(";", row));
        }
    }
    project.SendInfoToLog("Данные успешно сохранены в файл: " + backupFilePath);
}
catch (Exception ex) {
    project.SendErrorToLog(ex.ToString());
}
 

doc

Client
Регистрация
30.03.2012
Сообщения
8 685
Благодарностей
4 643
Баллы
113
C#:
    // Сохранение данных вручную
    using (StreamWriter writer = new StreamWriter(backupFilePath, false, Encoding.UTF8)) {
        for (int i = 0; i < table2.RowCount; i++) {
            var row = table2.GetRow(i);
            writer.WriteLine(string.Join(";", row));
        }
    }
это лишнее
 
  • Спасибо
Реакции: Devostator

Devostator

Client
Регистрация
17.09.2011
Сообщения
273
Благодарностей
28
Баллы
28
C#:
    // Сохранение данных вручную
    using (StreamWriter writer = new StreamWriter(backupFilePath, false, Encoding.UTF8)) {
        for (int i = 0; i < table2.RowCount; i++) {
            var row = table2.GetRow(i);
            writer.WriteLine(string.Join(";", row));
        }
    }
это лишнее
Спасибо, потестирую без.
 

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)