Кто-нибудь может посоветовать простой способ создания таблиц SQL на лету, используя загрузку файла CSV в .NET Web App? - PullRequest
1 голос
/ 11 ноября 2009

Я проверил несколько ответов, но не смог найти конкретных подробностей о том, как мы можем создать таблицу SQL с использованием пользовательских метаданных (или столбцов из файла CSV), которые загружаются пользователем через файл CSV. Функция, доступная на www.dabbledb.com, например, создание онлайн-базы данных для пользовательской информации. Это будет веб-приложение .NET, использующее SQL Server 2005 или 2008 в качестве базы данных.

С нетерпением ждем от вас.

Спасибо SA

Ответы [ 4 ]

1 голос
/ 11 ноября 2009

Я недавно работал над чем-то очень близким к вашим требованиям. В моем случае данные из каждой строки в CSV-файле, которые загружаются на сервер, хранятся как «BLOB-объекты». Я использовал читатель Lumen Works для анализа загруженного файла CSV. Он имеет возможность читать заголовки столбцов, которые вы можете удалить из пробелов и, возможно, к столбцам таблицы базы данных SQL.

Надеюсь, это поможет indyfromoz

0 голосов
/ 11 ноября 2009

Это всего лишь пример того, как я мог бы это сделать (что означает, что он может быть ошибочным и ошибочным ...)

CSV-файл:

Column:ColumnType:size:n, Column:Type:size:n, Column:Type:size:y
C1Data, C2Data, C3Data

Псевдокод:

StringBuilder sql = new StringBuilder();
sb.append("CREATE TABLE " + someTableName+ "(" + Environment.NewLine);
for(string s in csvlines) {
 if(first_line) {

    // pull apart our columns
    string[] cols = s.Split(new char[] { ',' });

    // iterate over the list of columns
    for(string col in cols) {

      // pull apart the column name, type, size and nullable flag
      string[] ci = col.Split(new char[] { ':' });

      // add our column name and add the datatype
      sb.Append("[" + ci[0] + "]" + " [" + ci[1] + "] ");

      // only put a size if value greater than 0
      if(ci[2] != "0") {
        sb.Append("(" + ci[2] + ") ");
      }

      // put our NULLABLE flag on NULL columns only
      if(ci[3] == "y") {
        sb.Append("NULL," + Environment.NewLine);
      } else {
        sb.Append("NOT NULL," + Environment.NewLine);
      }
    }

    // remember the above has a bug where the last column has a rouge ,
    sb.Append(")");
 } else  {
     // create our insert statement and insert as appropriate
 }
}

Может быть отвратительным, может быть грязным, может просто делать то, что вам нужно!

0 голосов
/ 11 ноября 2009

Мы только что написали Perl-программу, которая читает csv, анализирует данные в каждом столбце, сначала пытается поверить, что первая строка - это имена столбцов, а затем объединяет оператор create table и вставку группы 0f. Мы можем запустить его из командной среды или системного вызова внутри PHP.

0 голосов
/ 11 ноября 2009

Если вы используете базу данных значений атрибутов сущностей, вы можете просто добавить новые столбцы в таблицу основных атрибутов, связанных с сущностью, а затем просто присвоить значения в таблице значений атрибутов для сущности.

Но, если это не имеет смысла, тогда вы захотите использовать команду ALTER TABLE и добавить новые столбцы, но если вы собираетесь динамически изменять структуру таблицы, то вы можете рассмотреть структуру базы данных EAV .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...