【问题标题】:incorrect syntax error near ,附近有不正确的语法错误,
【发布时间】:2013-12-19 16:08:55
【问题描述】:

我最近将我的数据库从访问更改为 .mdf,但现在我无法让我的代码正常工作。

我遇到的一个问题是这个错误“靠近”的语法不正确。

我尝试了不同的方法来尝试解决这个问题,例如放入括号、移动逗号、放入空格、取出空格,但我就是无法理解。

如果有人可以帮助我,我将不胜感激。

我的代码是:

SqlStr = "INSERT INTO UserTimeStamp ('username', 'id') SELECT ('username', 'id') FROM Staff WHERE password = '" & passwordTB.Text & "'"

【问题讨论】:

  • 假设您正在寻找 usernameid 列,那么这不是正确的 SQL 语法:"INSERT INTO UserTimeStamp (username, id) SELECT username, id FROM Staff WHERE password = '" & passwordTB.Text & "'"
  • 没问题,我已将其添加为答案。

标签: sql syntax mdf


【解决方案1】:

假设您要查找 username 和 id 列,那么这不是正确的 SQL 语法。

主要问题是您选择的列名用单引号和括号括起来。尝试将其更改为:

SqlStr = "INSERT INTO UserTimeStamp (username, id) SELECT username, id FROM Staff WHERE password = '" & passwordTB.Text & "'"

这将像这样发送到 SQL:

INSERT INTO UserTimeStamp (username, id) 
    SELECT username, id 
    FROM Staff
    WHERE password = 'some password'

【讨论】:

  • 这个答案仍然使用户受到 SQL 注入攻击。我建议使用一种方法来保护临时查询的参数或使用存储过程。
  • 基本上,用户通过一个输入发送 SQL 命令,该输入插入到您要连接字符串的查询中(在您的例子中:password = '" & passwordTB.Text & "'")。这是一篇关于它们以及如何避免它们的好(但旧)文章:SQL Injection Attacks and Some Tips on How to Prevent Them。在 .NET 中,您可以使用 SqlParameterCollection.AddWithValue 来避免它们
  • 不过,我不确定您使用的是哪种编程语言,所以我忽略了这一点。但是,如果您正在使用 .NET 语言,那么该 MSDN 链接包含一些很好的示例。如果没有,您肯定可以通过将您的编程语言名称 +“参数化查询”扔到 Google 中找到一些
  • 是的,我使用的是 .Net 语言。谢谢 Valverij!
【解决方案2】:

我可能会看到许多问题。

  1. 不应引用列名,即 INTO UserTimeStamp('username','id') 应为 INTO UserTimeStamp(username, id)

  2. 列字段,除非是文字字符串,也不应该被引用。即 SELECT ('username','id') 应该是 SELECT username, id。

  3. 这样引用您的参数会使您自己面临 T-SQL 注入的风险。如果您进行临时查询,您应该考虑使用存储过程,或者使用经过良好测试的函数来保护您的参数。

    SqlStr = "INSERT INTO UserTimeStamp (username, id) SELECT username, id FROM Staff WHERE password = " + MyQuoteFunction(passwordDB.Text);

【讨论】:

    【解决方案3】:

    尝试将列名包含在方括号中,如下所示:

    INSERT INTO employee ([FirstName],[LastName]) SELECT [FirstName],[LastName] FROM Employee where [id] = 1
    

    编辑:同时删除所选字段周围的括号。

    【讨论】:

    • 这和上面的问题完全没有关系
    • @valverij 确实如此。与问题中的单引号不同,这是一种有效但特定于 MSSQL 的引用标识符的方式。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    相关资源
    最近更新 更多