使用 Mono.Data.SqliteClient 库的 SQLite 语法

SQLite syntax using the Mono.Data.SqliteClient library

我正在使用 SQLite 在 Unity 5.4 中编写一个库存系统,但我无法弄清楚语法或在任何地方都找不到很好的示例。想法?

public void GetInventory(string _user, string _container) {
    ExecuteSQL("SELECT User (Name), Modifier (ModName), Property (PropName) " +
        "FROM User " +
            "[INNER] JOIN Ownership " +
            "[INNER] JOIN Container " +
                "[INNER] JOIN Inventory " +
                    "[INNER] JOIN Item " +
                        "[INNER] JOIN Property " +
                            "[INNER] JOIN Modifier " +
                                "ON User (UserID) = Ownership (UserID) " +
                                "AND Ownership (ContainerID) = Container (ContainerID) " +
                                "AND Container (ContainerID) = Inventory (ContainerID) " +
                                "AND Inventory (ItemID) = Item (ItemID) " +
                                "AND Item (PropertyID) = Property (PropertyID) " +
                                "AND Item (ModifierID) = Modifier (ModifierID) " +
                            "WHERE User (Name) = '" + _user + "' AND Container (ContainerName) = '" + _container + "'", false);
}

我用更简单的命令测试了该功能,它运行良好。我已经在数据库管理器中测试了该功能。 我不熟悉 SQLite 语法的这种风格,而且我在任何地方都找不到很好的例子。谁能指出哪里出了问题?

我得到的错误是 "No such function: User"

您的查询语法已关闭。这是您应该如何编写此查询:

SELECT t1.name,
       t7.ModName,
       t6.PropName
FROM User t1
INNER JOIN Ownership t2
    ON t1.UserID = t2.UserID
INNER JOIN Container t3
    t2.ContainerID = t3.ContainerID
INNER JOIN Inventory t4
    ON t3.ContainerID = t4.ContainerID
INNER JOIN Item t5
    ON t4.ItemID = t5.ItemID
INNER JOIN Property t6
    ON t5.PropertyID = t6.PropertyID
INNER JOIN Modifier t7
    ON t5.ModifierID = t7.ModifierID
WHERE t1.Name = '" + _user + "' AND
      t3.ContainerName = '" + _container + "'"

我从未在 .NET 中使用过 SQLite,但这并不重要,因为您的语法与我所知道的完全不同。顺便说一句,您的直接错误可能是由于此引起的:

SELECT User (Name)

SQLite 认为您正在尝试调用名为 User 的函数。其他主要问题包括在连接后将所有 ON 子句放在一起。 ON 子句需要出现在每个连接之后。