当前位置:  开发笔记 > 编程语言 > 正文

C#动态地将列添加到数据库中的表

如何解决《C#动态地将列添加到数据库中的表》经验,为你挑选了1个好方法。

我还在学习编程,所以这可能是一个显而易见的问题,但我正在编写一个程序,用户可以导入一个没有列约束的excel文件(这意味着每个excel文件可能有不同的列数)等等).我想要做的是能够使用SQLite将导入的excel文件转换为数据库表.据我所知,SQLite的语法与ADO语法相同,但我不确定如何在数据库中动态创建表.我正在寻找任何形式的建议,如果有人想在代码中展示一个很酷的例子.

谢谢!弥敦道



1> Amirshk..:

这是一段用于在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中,您只能将coloumn添加到现有表,并且只能添加到表的末尾:

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

加成

假设您将数据从excel导入DataSet,您现在可以遍历DataSet的DataTables,创建相应的表并填充它们:(免责声明,尚未测试)

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

推荐阅读
有风吹过best
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有