gpt4 book ai didi

sqlite - 如何使用 SQLite.NET PCL 运行一批 SQL 语句

转载 作者:IT王子 更新时间:2023-10-29 06:21:51 24 4
gpt4 key购买 nike

在过去,我避免使用 ORM 并总是手工制作参数化查询等。这在首次开发应用程序时非常耗时且非常痛苦。最近我决定再看看 ORM,特别是 Sqlite.NET ORM。

我想使用 SQLite ORM 功能,但也能够运行一批 native SQL 命令来预填充数据库。

我们正在使用 SqliteNetExtensions-MvvmCross dll 来启用一对多关系等,这一切看起来都很好。当我想用配置数据为数据库播种时,我的问题就来了。我希望简单地提供一个 sql 文件,其中包含一系列可以依次运行的 sql 语句。

我已经从 GITHub 上获取了 SQlite.NET 代码并运行了测试。然后我扩展了具有简单 [Product] 表的 StringQueryTests 类来执行以下操作:-

     [Test]
public void AlanTest()
{
StringBuilder sb = new StringBuilder(200);
sb.Append(" DELETE FROM Product;");
sb.Append(" INSERT INTO Product VALUES (1,\"Name1\",1,1);");
sb.Append(" INSERT INTO Product VALUES (2,\"Name2\",2,3);");
db.Execute(sb.ToString());
}

当我运行它时,它不会抛出错误,实际上行为似乎是它只会运行第一个命令。如果我将 sb.ToString() 的内容粘贴到 sqlite 数据库查询窗口中,它将正常工作。

这是预期的行为吗?如果是这样,我该如何克服这个问题,以便我可以使用上述方法。如果可能的话,我真的不想创建对象来管理所有 SQL 语句。

我可以看到可以采用多种方法来解决这个问题 - 任何人都可以解决这个问题或提出他们认为可以解决这个问题的建议吗?

亲切的问候

艾伦。

最佳答案

我也遇到了这个问题。 I found a blog post that explains why.

以下是帖子内容,以防它丢失。

All of the code [in sqlite-net] correctly checks the result codes and throws exceptions accordingly.

Although I haven't posted all relevant code here, I did review it, and the real origin of this behavior is elsewhere - in the native sqlite3.dll sqlite3_prepare_v2 method. Here's the relevant part of the documentation:

These routines only compile the first statement in zSql, so *pzTail is left pointing to what remains uncompiled.Since sqlite-net doesn't do anything with the uncompiled tail, only the first statement in the command is actually executed. The remainder is silently ignored. In most cases you won't notice that when using sqlite-net. You will either use its micro ORM layer or execute individual statements. The only common exception that comes to mind, is trying to execute DDL or migration scripts which are typically multi statement batches.

关于sqlite - 如何使用 SQLite.NET PCL 运行一批 SQL 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24175932/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com