我仍在学习很多有关编程的知识,所以这可能是一个明显的问题,但我正在编写一个程序,用户可以在其中导入没有列约束的 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);
}
您可以使用标准的 SQLite 查询语言创建表,使用 ExecuteNonQuery 来创建表。
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();
}
}