【问题标题】:'Syntax error in INSERT INTO statement.' Cannot insert data into database [duplicate]'INSERT INTO 语句中的语法错误。'无法将数据插入数据库[重复]
【发布时间】:2018-05-12 09:41:02
【问题描述】:

我正在为一个程序创建一个注册表单,但是我无法将用户名和密码保存到 microsoft access 数据库中。我看不出我的代码哪里出了问题,我不断收到“INSERT INTO 语句中的语法错误”。这是我的代码...

    Dim sql As String = "INSERT INTO Users (username, password) VALUES (" & Me.Usernametxtb.Text & "','" & Me.Passwordtxtb.Text & "')"

        Dim cms As New OleDbCommand(sql, conn)
        cms.Parameters.AddWithValue("@username", Usernametxtb.Text)
        cms.Parameters.AddWithValue("@password", Passwordtxtb.Text)
        cms.ExecuteNonQuery()

【问题讨论】:

  • 您正在将值直接插入查询中,而无需打开单引号。你可能打算做这样的事情INSERT INTO Users (username, password) VALUES (@username, @password)(可能会有所不同。你没有显示你使用的是什么语言或任何东西。)
  • 我使用 vb.net 创建了一个表单,我直接从用户填写的表单上显示的文本框中获取用户名和密码的值

标签: sql vb.net ms-access ado.net


【解决方案1】:

您正在添加参数,但您的语句未参数化。如果不使用@username 在 SQL 语句中引用这些参数,它们就不会在任何地方使用。第一行仍然容易受到 SQL 注入的影响,因为您正在连接原始用户输入。

另外,do not store passwords in plaintext, ever.

【讨论】:

  • 除了您提到的之外,OP 还在他的查询中的参数值周围添加单引号。我不知道这是否正确(我发现的代码示例不包含任何内容),但如果正确,仍然无法正常工作,因为第一个参数值之前缺少引号。
【解决方案2】:

密码是Access中的保留字,所以试试:

Dim sql As String = "INSERT INTO Users (username, [password]) VALUES (@username, @password)"

Dim cms As New OleDbCommand(sql, conn)
cms.Parameters.AddWithValue("@username", Usernametxtb.Text)
cms.Parameters.AddWithValue("@password", Passwordtxtb.Text)
cms.ExecuteNonQuery()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多