【问题标题】:Syntax Error in FROM Clause - MS. AccessFROM 子句中的语法错误 - MS。使用权
【发布时间】:2014-08-29 23:16:23
【问题描述】:

代码如下:

str = "select * from user where username= '" & txtUsername.Text & "' & password = '" & txtPassword.Text & "'"
perintah = New OleDbCommand(str, conn)
reader = perintah.ExecuteReader()

If reader.Read Then
    MessageBox.Show("login success")
Else
    MessageBox.Show("login failed")
End If

【问题讨论】:

  • 请使用CTRL + K链接代码块
  • 你试过打印str吗?
  • 顺便说一句,你不应该在那里打电话给Read。如果您只想知道是否有数据但不打算使用该数据,请使用HasRows 属性。更好的是,编写一个返回布尔值或计数的查询来指示数据是否存在,然后调用ExecuteScalar,而不是创建一个数据读取器。

标签: vb.net visual-studio-2010 ms-access ms-access-2010


【解决方案1】:

最直接的问题很可能是“用户”是一个保留字。不是 100% 确定 Access,但它在大多数数据库中。尝试转义它,即“[user]”,看看是否能解决它。

我还刚刚注意到您正在使用“&”,其中“AND”是您需要的运算符。我相信“密码”也是一个保留字,所以也要避开它。

尽管如此,您仍然存在其他潜在问题。使用字符串连接将值插入 SQL 代码是一种灾难,不仅可能导致语法错误,而且更糟糕的是,会使您面临 SQL 注入。 Read this 了解更多信息。具体在这种情况下,请执行以下操作:

str = "SELECT * FROM [user] WHERE username = @username AND [password] = @password"
perintah = New OleDbCommand(str, conn)
perintah.Parameters.Add("@username", OleDbType.VarChar, 50).Value = txtUsername.Text
perintah.Parameters.Add("@password", OleDbType.VarChar, 50).Value = txtPassword.Text

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-08
    • 1970-01-01
    • 2013-11-02
    • 2019-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多