以编程方式使用转储文件创建sqlite数据库

时间:2016-01-09 08:31:42

标签: c# sqlite dump

我已经从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();
}

2 个答案:

答案 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();
}