如何使用SQLitePCL执行sql文件的内容

如何使用SQLitePCL执行sql文件的内容,sqlite,uwp,Sqlite,Uwp,我正在尝试使用SQLitePCL包开发一个简单的UWP应用程序,它可以执行数据库命令(create-select-update-delete)。我创建了一个包含一些sqlite命令的数据库sql文件,并尝试在代码中执行它们: Uri appUri = new Uri("ms-appx:///Assets/db.sql"); StorageFile sFile = StorageFile.GetFileFromApplicationUriAsync(appUri).

我正在尝试使用SQLitePCL包开发一个简单的UWP应用程序,它可以执行数据库命令(create-select-update-delete)。我创建了一个包含一些sqlite命令的数据库sql文件,并尝试在代码中执行它们:

        Uri appUri = new Uri("ms-appx:///Assets/db.sql");
        StorageFile sFile = StorageFile.GetFileFromApplicationUriAsync(appUri).AsTask().ConfigureAwait(false).GetAwaiter().GetResult();
        string sSQL = FileIO.ReadTextAsync(sFile).AsTask().ConfigureAwait(false).GetAwaiter().GetResult();
        ISQLiteStatement cnStatement = dbConnection.Prepare(sSQL);
        cnStatement.Step();
但是当我运行程序时,它只执行sql文件中的第一条语句,即CREATE command和exit,而不执行其余的命令。以下是sql文件的示例内容:

  CREATE TABLE Superhero (
  Type    TEXT PRIMARY KEY,
  Picture TEXT
  );

  INSERT INTO Superhero (
                     Type,
                     Picture
                 )
                 VALUES (
                     'batman',
                     'batman.ico'
                 );
有人知道SQLitePCL中是否有执行sql文件的方法吗? 任何帮助都将不胜感激!
谢谢

根据接口描述:

这些例程只编译zSql中的第一条语句,因此*pzTail左指未编译的语句

因此,似乎只有命令中的第一条语句实际执行。其余部分则被默默忽略。由于每个命令都以符号“;”结尾,为了快速简单的解决方案,您可以将sql命令拆分为单个语句,然后逐个执行。例如:

string sSQL = FileIO.ReadTextAsync(sFile).AsTask().ConfigureAwait(false).GetAwaiter().GetResult();
var dbConnection = new SQLiteConnection("sun.db", SQLiteOpen.READWRITE);
//using (ISQLiteStatement cnStatement = dbConnection.Prepare(sSQL))
//{
//    var result = cnStatement.Step();
//} 
var statements = sSQL.Split(new[] { ';' });
foreach (string onestate in statements)
{
    using (ISQLiteStatement cnStatement = dbConnection.Prepare(onestate))
    {
        var result = cnStatement.Step();
    }
}

否则,您可能需要更新
SQLitePCL
Nuget包。

根据接口说明:

这些例程只编译zSql中的第一条语句,因此*pzTail左指未编译的语句

因此,似乎只有命令中的第一条语句实际执行。其余部分则被默默忽略。由于每个命令都以符号“;”结尾,为了快速简单的解决方案,您可以将sql命令拆分为单个语句,然后逐个执行。例如:

string sSQL = FileIO.ReadTextAsync(sFile).AsTask().ConfigureAwait(false).GetAwaiter().GetResult();
var dbConnection = new SQLiteConnection("sun.db", SQLiteOpen.READWRITE);
//using (ISQLiteStatement cnStatement = dbConnection.Prepare(sSQL))
//{
//    var result = cnStatement.Step();
//} 
var statements = sSQL.Split(new[] { ';' });
foreach (string onestate in statements)
{
    using (ISQLiteStatement cnStatement = dbConnection.Prepare(onestate))
    {
        var result = cnStatement.Step();
    }
}
否则,您可能需要更新
SQLitePCL
Nuget包