簡體   English   中英

C#將列動態添加到數據庫中的表

[英]C# Dynamically Add Columns to table in Database

我仍在學習一些編程知識,因此這可能是一個顯而易見的問題,但是我正在編寫一個程序,用戶可以在其中導入無列限制的excel文件(這意味着每個excel文件可以具有不同數量的列)等等)。 我想做的是能夠使用SQLite將導入的Excel文件轉換成數據庫表。 據我所讀,SQLite的語法與ADO語法相同,但是我不確定如何在數據庫中動態創建表。 我正在尋找任何形式的建議,如果有人想在代碼中顯示一個很棒的示例。

謝謝! 內森

這是在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);
}

您可以使用ExecuteNonQuery來創建表,並使用標准的SQLite查詢語言CREATE TABLE

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM