1

我检查了一些答案,但无法找到有关如何使用用户通过 CSV 文件上传的自定义元数据(或 CSV 文件中的列)创建 SQL 表的具体细节。www.dabbledb.com 提供的一项功能,例如为自定义信息创建在线数据库。它将是一个基于 Web 的 .NET 应用程序,使用 SQL Server 2005 或 2008 作为后端数据库。

期待您的来信。

谢谢你SA

4

4 回答 4

1

我最近做了一些非常接近你要求的事情。就我而言,上传到服务器的 CSV 文件中每一行的数据都存储为“blob”。我使用Lumen Works CSV 阅读器来解析上传的 CSV 文件。它具有读取列标题的能力,您可以去除空格并可以读取 SQL 数据库表列。

希望这有助于 indyfromoz

于 2009-11-11T05:23:15.940 回答
0

这只是我将如何做到这一点的一个例子(这意味着它可能是错误的和错误的......)

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
 }
}

可能很恶心,可能很脏,可能只是做你需要的!

于 2009-11-11T05:56:38.347 回答
0

如果您使用的是实体属性值数据库,那么您只需在主属性表中添加新列,链接到实体,然后只需在属性值表中为实体分配值。

但是,如果这没有意义,那么您将需要使用该ALTER TABLE命令并添加新列,但如果您要动态更改表结构,那么您可能需要考虑 EAV 数据库结构。

于 2009-11-11T05:22:06.200 回答
0

我们刚刚编写了一个读取 csv 的 perl 程序,分析每列中的数据,首先尝试相信第一行是列名,然后拼凑出一个 create table 语句和一堆 0f 插入。我们可以从命令环境或 PHP 内部的系统调用中运行它。

于 2009-11-11T05:29:12.760 回答