Nano Hash - криптовалюты, майнинг, программирование

С# Динамическое добавление столбцов в таблицу в базе данных

Я все еще немного изучаю программирование, поэтому это может быть очевидный вопрос, но я нахожусь в процессе написания программы, в которой пользователь может импортировать файл excel без ограничений столбцов (это означает, что каждый файл excel может иметь разное количество столбцов и так далее). Что я хочу сделать, так это преобразовать импортированный файл excel в таблицу базы данных с помощью SQLite. Насколько я читал, синтаксис для SQLite такой же, как синтаксис ADO, но я не уверен, как динамически создавать таблицы в базе данных. Я ищу любую форму предложений, если кто-то захотел показать пример в коде, который был бы крут.

Спасибо! Натан

15.10.2009

  • Можно ли поискать другое решение. Создание таблицы для каждого загруженного файла - плохая идея, подумайте о 10000 таблиц. 15.10.2009

Ответы:


1

Вот кусок кода для создания таблицы в sqlite:

SQLiteConnection mDBcon = new SQLiteConnection();
mDBcon.ConnectionString = "Data Source=" + DataSourcePath;
mDBcon.Open();
SQLiteCommand cmd = new SQLiteCommand(mDBcon);
cmd.CommandText = "CREATE TABLE IF NOT EXISTS tags (ISBN VARCHAR(15), Tag VARCHAR(15));";
cmd.ExecuteNonQuery();

обратите внимание, что в SQLite вы можете добавить столбец только в существующие таблицы и только в конец таблицы:

cmd.CommandText = "ALTER TABLE books ADD COLUMN PublishDate DateTime;";
cmd.ExecuteNonQuery();

Дополнение

Предполагая, что вы импортировали данные из Excel в DataSet, теперь вы можете перебирать DataTables DataSet, создавать соответствующие таблицы и заполнять их: (отказ от ответственности, не проверял это)

foreach(DataTable table in dataSet.Tables)
{
    SQLiteCommand cmd = new SQLiteCommand(mDBcon);
    cmd.CommandText = "CREATE TABLE IF NOT EXISTS " + table.Name + "(";
    bool first = true;
    foreach (DataColumn column in table.Columns)
    {           
        cmd.CommandText += "@"+column.Name;
        if (!first) cmd.CommandText += ",";
        else first = false;
        cmd.Parameters.Add(new SQLiteParameter("@"+column.Name, column.Name));
    }
    cmd.CommandText += ");";
    cmd.ExecuteNonQuery();

    // Fill the new table:
    SQLiteDataAdapter da = new SQLiteDataAdapter("select * from " + table.Name, mDBcon);
    da.Fill(table);
}
15.10.2009
  • Ах, я не знал, что вам уже пришлось сделать стол, но это неважно. Я предполагаю, что моя главная проблема заключается в том, что я не могу понять, как программно получить имена столбцов из файла Excel, получить связанные с ними типы, а затем каким-то образом превратить это в оператор Create Table. Если я превращу импорт в набор данных, смогу ли я использовать схему набора данных в качестве схемы таблицы моей базы данных? 15.10.2009
  • @Nathan: не использовал набор данных для импорта данных в sqlite, но, поскольку он имеет полную поддержку ADO, я полагаю, вы можете. 15.10.2009
  • Можете ли вы придумать пример того, как я мог бы взять столбец из набора данных и использовать ADO, чтобы добавить его в оператор Create Table? 15.10.2009
  • вау, спасибо, я возьму это и включу в свой код. Я дам вам знать, как это работает завтра. 15.10.2009

  • 2

    Вы можете просто использовать ExecuteNonQuery для создайте свою таблицу, используя стандартный язык запросов SQLite для CREATE TABLE.

    15.10.2009
    Новые материалы

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

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..