我已经从Sqlite数据库创建了一个转储文件,我想在我的C#
应用程序中基于此文件创建另一个sqlite数据库。
转储文件的示例:
drop table if exists [main].[tblAyah];
CREATE TABLE [main].[tblAyah] (
[IdAyah] INTEGER NOT NULL PRIMARY KEY ON CONFLICT REPLACE AUTOINCREMENT,
[AyahNumber] INTEGER,
[Page] INTEGER);
insert into [main].[tblAyah] values(1, 1, 1, 'somthing','somthing');
...
所以我的问题是:
有没有特定的方法可以做到这一点,或者我只需要将文件作为字符串读取并逐个运行每个命令行,如下所示:
IEnumerable<string> tblCommand;
//Reading the dump file line by one and adding to tblCommand
using (SqlCeConnection con = new SqlCeConnection(
"DataSource=\"|DataDirectory|\\newDb.db\";Persist Security Info=False;"))
{
con.Open();
foreach (string command in tblCommand)
using (SqlCeCommand com =
new SqlCeCommand(command, con))
{
com.ExecuteNonQuery();
}
con.Close();
}
答案 0 :(得分:0)
可以通过一次执行执行多个命令。它们必须用“;”分开。试试吧。如果您遇到错误,请告诉我们。但它应该工作,它是创建表或更新数据库结构的一个很好的解决方案,因为如果一个Statement错误,它们都不会被执行。
答案 1 :(得分:0)
这可以通过创建新连接,将SQL转储读入内存,然后使用SQLiteCommand
ExecuteNonQuery
将转储应用于当前连接来完成。
注意:我建议您使用SQLiteConnectionStringBuilder
创建连接字符串,并使用SQLiteConnection
进行连接。在您使用SqlCeConnection
。
在开始之前,请从NuGet安装System.Data.SQLite
。
using System.Data.SQLite;
// ...
var builder = new SQLiteConnectionStringBuilder
{
DataSource = @"C:\<Path to your data directory>\<New database file name>.db",
Version = 3,
// Any other connection configuration goes here
};
string connectionString = builder.ToString();
using(SQLiteConnection databaseConnection = new SQLConnection(connectionString)) {
// Open the connection to the new database
databaseConnection.Open();
// Import the SQL file database dump into the in-memory database
SQLiteCommand command = databaseConnection.CreateCommand();
string dumpFile = Path.Combine("Path to your sql dump file", "YourDumpFileName.sql");
string importedSql = File.ReadAllText(dumpFile);
command.CommandText = importedSql;
command.ExecuteNonQuery();
}