【问题标题】:Do SQLite parameters need to be encapsulated in ''SQLite参数是否需要封装在''中
【发布时间】:2014-06-21 11:00:52
【问题描述】:

我使用 System.Data.Sqlite 来访问 sqlite3 数据库。

我经常使用这样的语句

cmd.CommandText = "INSERT INTO Properties (name, value) VALUES(@name, @value)"
cmd.Parameters.AddWithValue("@name", "Database Format")
cmd.ExecuteNonQuery()

参数值可以是任意的,因此它们可能包含空格。 API 是否足够聪明,可以自动将这些封装在 ' ' 中,还是我应该自己这样做

cmd.CommandText = "INSERT INTO Properties (name, value) VALUES('@name', '@value')"
cmd.Parameters.AddWithValue("@name", "Database Format")
cmd.ExecuteNonQuery()

我没有深入了解 SQL 语法等,所以我不知道什么是真正有效的,什么不是。

【问题讨论】:

    标签: vb.net sqlite system.data.sqlite


    【解决方案1】:

    不,您不需要用单引号包裹 sql 命令参数。

    包装参数甚至可能适得其反,导致它不被识别为参数,而是,就像其他 SO 帖子中 OP 发生的情况一样:SqlCommand parameters aren't working properly

    【讨论】:

    • 我明白了。我会调查一下,很好的发现。
    【解决方案2】:

    我不知道 Sqlite 是否有任何特殊的命令解析能力,但 SQL 通常期望/需要某些数据类型的单引号。

    一般来说,像数字和日期这样的类型不需要用单引号括起来,但可以包含空格的数据类型需要用单引号括起来。

    简短的回答是,如果您不确定,请将其包装然后测试。

    编辑:使用参数有点不同,但再次尝试,然后测试。

    【讨论】:

    • 测试当然总是必要的。但是,作为新手,一些用于预测行为的更清晰的定义也很重要,尤其是在您的 beta 测试人群非常有限的情况下;-)
    猜你喜欢
    • 2011-05-06
    • 1970-01-01
    • 2016-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-16
    相关资源
    最近更新 更多