лучший способ сохранить представление данных в базе данных

1

У меня есть datagridview и база данных SQLite. У datagrid может быть любое количество строк и любое количество столбцов.

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

Любой sugestion?

благодаря

Теги:
export
datagridview

1 ответ

3
Лучший ответ

Это немного зависит от того, как вы заполняете DataGridView.

  1. Если вы используете DataSource и список объектов, вы можете сохранить свойства в своей базе данных. Заглавные буквы "ЛЮБОЙ" ищут меня, что это не ваше решение, но я добавил, что оно будет полным.
  2. Если вы заполните сетку напрямую (items.add), вы можете сохранить значения в виде пар имя-значение в базе данных
  3. Если вы заполнили сетку напрямую и не понравились (2), вы можете создать столбцы в своей базе данных, соответствующие вашему представлению datagrid.

Предложение -1-

Вы привязываете свой "Автомобиль как список (автомобиль)" к DataGridView. Теперь вы можете просматривать объекты с отражением и даже создавать таблицу с этим (код untested, database.executeQuery() - это просто место для вашей функции выполнения базы данных):

database.exeuteQuery("CREATE TABLE car")
for each pi as PropertyInfo in GetType(Car).getProperties()
    database.executeQuery("ALTER TABLE car ADD COLUMN " & pi.name & " TEXT(255)")
next for
for each car as Car in Cars
    Dim insert As String = ""
    Dim values as String = ""
    for each pi as PropertyInfo in car.getType().getProperties()
        if insert <> "" then
            insert &= ", "
            values &= ", "
        end if
        insert &= pi.name
        values &= pi.getValue(car, nothing)
    next for
    database.executeQuery("INSERT INTO car (" & insert & ") VALUES (" & values & ")")
next for

Предложение -2-

Вы храните пары имя-значение в базе данных. Если ваша сетка "маленькая" (100000 <строк *), это достаточно быстро и обладает большой гибкостью, не меняя структуру базы данных.

For Each row as DataGridViewRow in MyDataGridView.Rows
    For Each col as DataGridViewColumn in MyDataGridView.Columns
        database.executeQuery("INSERT INFO dgvContent( RowId, Name, Value ) VALUES ( " & row.Index & ", '" & col.Name & "', '" & row.Cells(col).Value & "' ")
    Next For
Next For

Чтобы получить и обновить данные, вы можете использовать RowId, чтобы получить значения одной строки вместе.

Предложение -3-

Это комбинация предложений 2 и 1. Вы создаете столбцы DataGridView в своей базе данных и имеете DataGridView точно так же в своей базе данных. Это более гибко, чем предложение -1-, поскольку вы не можете изменять свойства объекта "на лету", но гораздо больше хлопот, чем предложение -2-, поскольку вам нужно создавать, удалять и упорядочивать структуру таблицы. Реальный статистический анализ возможен с предложением -3-, но поскольку структура таблицы не является статичной, ее очень сложно реализовать. (Нет кода для этого примера. Просто скомбинируйте код предложения 2 с кодом предложения 1)

Вывод

Я думаю, что нет лучшего способа сохранить DataGridView с ЛЮБЫМИ строками и ЛЮБЫМИ столбцами. Все зависит от ситуации. Иногда я бы использовал предложение -2-, так как он кодируется, а структура базы данных статична. Иногда я бы использовал Suggestion -3-, поскольку он может обрабатывать больше данных и писать запросы против него, что кажется более естественным. Но здесь структура базы данных сильно меняется. Изменения требуют времени

Дальше по дороге

В немногих более крупных приложениях я никогда не заполняю данные непосредственно из DataGridView в базу данных. Я всегда использую один слой абстракции (модельный слой, например ORM) между ними. Я думаю, что это имеет следующие преимущества: 1. Вы можете использовать свои подпрограммы базы данных более гибкими для большего, чем только один DataGridView. (Я действительно реалистично дублирую код дублирования). 2. Вы можете сделать изменения более легко: если DataGridView изменится, вам не нужно думать о базе данных, только ваш уровень абстракции легкого. Если ваша база данных меняется, вам не нужно жестко смотреть. 3. Логика данных не является частью представления, логика данных переходит к уровню модели.

  • 1
    очень хороший ответ! отличный! благодарю вас! :)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню