【问题标题】:Access OLEDB reports "syntax error" but the statement looks correctAccess OLEDB 报告“语法错误”但语句看起来正确
【发布时间】:2014-01-05 22:18:01
【问题描述】:

我正在 ASP.net 中编写一个简单的页面来更新 Access 表中的密码。以下是有效的 SELECT 查询的语法:

    Dim dbConn As OleDbConnection
    Dim dbCommand As OleDbCommand
    Dim dbReader As OleDbDataReader

    'Connect to db
    dbConn = New OleDbConnection(Application("strConnectionString"))
    dbConn.Open()

    'Get user info
    strSQL = "SELECT * FROM users WHERE Username = '" & strUsername & "';"
    dbCommand = New OleDbCommand(strSQL, dbConn)
    dbReader = dbCommand.ExecuteReader()

还有我的连接字符串:

    Application("strConnectionString") = _
        "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & strDBPath & _
            "; Jet OLEDB:Database Password=" & strDBPassword & ";"

SELECT 工作正常,所以我知道我的连接正常。但是这个查询给了我一个语法错误:

strSQL = "UPDATE users SET Password = '1'"

在其他一切都相同的情况下,ASP 错误表明我的语法有错误。但是当我 response.write strSQL 行时,它给了我这个:

UPDATE users SET Password = '1' 

当我将其粘贴到 Access 中的查询编辑器中时,查询会将表中的所有“密码”字段更新为“1”,所以我知道语法是可以的。我在没有数据读取器并使用 dbCommand.ExecuteNonQuery() 的情况下进行了尝试,结果相同。

我已经获得了 Access 文件集的权限,因此每个人都可以完全控制,所以我认为这不是权限问题。

谁能看到我的错误?我真的被困住了。谢谢。

【问题讨论】:

  • 您的源代码看起来不太正确......引号字符串中的分号,没有分号终止语句(错位?)。对于 SQL,分号仅用于脚本、存储过程和 SQL 命令行实用程序中的语句终止,绝不会在您在构建更新语句时使用它的上下文中。
  • @rObjects,很高兴知道。这不是问题,但我会更新我的编码标准。

标签: asp.net ms-access syntax sql-update


【解决方案1】:

PASSWORD 是 Access SQL 中的 reserved word,因此如果它是列名,则需要将其括在方括号中。

strSQL = "UPDATE users SET [Password] = '1'" 

【讨论】:

  • Doggone 它,就这么简单。 “密码”在 Access 查询编辑器中有效,但在我页面的语法中无效。添加括号,问题解决。非常感谢!
  • @Stanton - 有道理!
猜你喜欢
  • 1970-01-01
  • 2016-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多