如何动态向表添加列?

问题描述 投票:0回答:3

我想将没有列约束(每个文件可以有不同数量的列)的 Excel 文件导入到 SQLite 数据库表中。如何在数据库中动态创建表?

c# sqlite
3个回答
7
投票

这是一段在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 导入到数据集, 您现在可以迭代数据集的数据表,创建相应的表并填充它们: (免责声明,尚未测试)

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

2
投票

您可以使用标准的 SQLite 查询语言创建表,使用 ExecuteNonQuery 来创建表。


0
投票
public void AddNewColumn(string columnName)
    {
        string query = $"ALTER TABLE YourTable ADD COLUMN {columnName} TEXT";
        using (SQLiteConnection connection = new SQLiteConnection(connectionString))
        {
            SQLiteCommand command = new SQLiteCommand(query, connection);
            connection.Open();
            command.ExecuteNonQuery();
        }
    } 
© www.soinside.com 2019 - 2024. All rights reserved.