【问题标题】:How to use SQLitePCL execute content of sql file如何使用 SQLitePCL 执行 sql 文件的内容
【发布时间】:2018-01-28 04:28:45
【问题描述】:

我正在尝试使用 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 命令并退出而不执行其余命令。下面是sql文件的示例内容:

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

  INSERT INTO Superhero (
                     Type,
                     Picture
                 )
                 VALUES (
                     'batman',
                     'batman.ico'
                 );

有人知道SQLitePCL 中是否有执行sql 文件的方法吗? 任何帮助将不胜感激! 谢谢!

【问题讨论】:

    标签: sqlite uwp


    【解决方案1】:

    根据sqlite3_prepare接口的描述:

    这些例程只编译 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 包。

    【讨论】:

      猜你喜欢
      • 2020-07-31
      • 1970-01-01
      • 2012-06-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多