C# OLEDB连接更新语法错误,SQL工作但未成功';更新数据库

C# OLEDB连接更新语法错误,SQL工作但未成功';更新数据库,c#,syntax-error,oledb,oledbconnection,C#,Syntax Error,Oledb,Oledbconnection,以下是示例代码: 其他一切都正常,但不断得到语法更新错误? SQL已检查,并在外部用作SQL查询 public bool changes() { OleDbConnection myConnection = GetConnection(); string myQuery = "UPDATE Login SET Pass='" + textBox1.Text + "' WHERE User='" + textBox2.Text + "'";

以下是示例代码: 其他一切都正常,但不断得到语法更新错误? SQL已检查,并在外部用作SQL查询

    public bool changes()
    {


        OleDbConnection myConnection = GetConnection();

        string myQuery = "UPDATE Login SET Pass='" + textBox1.Text + "' WHERE User='" + textBox2.Text + "'";

        OleDbCommand myCommand = new OleDbCommand(myQuery, myConnection);

        try
        {
            myConnection.Open();
            myCommand.ExecuteNonQuery();
            myConnection.Close();

        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
            return false;
        }

        return true;
    }

使用参数,而不是将值串联在字符串中:

下面是一个带有using语句的代码示例(如其他人建议的,用于正确处理资源):


使用参数,而不是将值串联在字符串中:

下面是一个带有using语句的代码示例(如其他人建议的,用于正确处理资源):


这是因为你的
WHERE
部分如下所示<代码>用户是MS访问中的用户,因此需要使用
[]
等进行转义

WHERE [User]='" + textBox2.Text + "'"

此外,您当前的方法容易受到SQL注入的影响。相反,使用另一个答案中建议的参数化查询。

这是因为您的
WHERE
部分如下所示<代码>用户是MS访问中的用户,因此需要使用
[]
等进行转义

WHERE [User]='" + textBox2.Text + "'"


此外,您当前的方法容易受到SQL注入的影响。改为使用另一个答案中建议的参数化查询。

您正在使用的RDBMS,并打印
myQuery
变量,然后查看它的打印内容Provider=Microsoft.ACE.OLEDB.12.0:使用:Database.accdb type file,这是一个本地文件。调试后,获取更新的正确值,但一旦它点击ExecuteOnQuery()方法,它将直接捕获异常。SQL中没有数据库连接问题,字段和数据库名称正确。异常的详细信息是什么?抛出:“更新语句中的语法错误。”(System.Data.OleDb.OledBeException)异常消息=“UPDATE语句中的语法错误。”,异常类型=“System.Data.OleDb.OleDbException”MyQuery输出:更新登录集Pass='password'WHERE User='Sam”您正在使用的RDBMS,并打印
MyQuery
变量,查看它的打印内容Provider=Microsoft.ACE.OleDb.12.0:使用:Database.accdb Type文件,该文件是本地文件。调试后,获取更新的正确值,但一旦它点击ExecuteOnQuery()方法,它将直接捕获异常。SQL中没有数据库连接问题,字段和数据库名称正确。异常的详细信息是什么?抛出:“更新语句中的语法错误。”(System.Data.OleDb.OledBeException)异常消息=“UPDATE语句中出现语法错误。”,异常类型=“System.Data.OleDb.OleDbException”MyQuery输出:更新登录集Pass='password',其中User='Sam“查询显示正常。在我看来,它不起作用的原因是输入必须包含导致驱动程序出错的字符(因为查询在外部工作)。我非常乐意将其作为一个评论,但在我看来,他似乎有一个问题(为什么它不起作用),我提供了一个答案(因为您是连接字符串而不是使用参数)。让我知道你为什么认为这应该是一个评论。如果你有一个令人信服的论点,我会让它成为一个。删除评论,因为现在你的编辑增加了价值。但这不是真正的问题。请看我的答案。我在代码中添加了参数。仍然以相同的语法结束。哦,上帝。把我逼疯了。这个问题似乎很合理。在我看来,它不起作用的原因是输入必须包含导致驱动程序出错的字符(因为查询在外部工作)。我非常乐意将其作为一个评论,但在我看来,他似乎有一个问题(为什么它不起作用),我提供了一个答案(因为您是连接字符串而不是使用参数)。让我知道你为什么认为这应该是一个评论。如果你有一个令人信服的论点,我会让它成为一个。删除评论,因为现在你的编辑增加了价值。但这不是真正的问题。请看我的答案。我在代码中添加了参数。仍然以相同的语法结束。哦,上帝。把我逼疯了,这很有道理。字段名选择不当。然而,他提到他能够手动运行查询…@Juan,这可能是OP在发布时犯的错误。因为他发布的查询在手动运行时甚至无法运行。哦,对不起,我没有在这里键入剩余的单词,所以我使用了where=Username。我就是这样运行它的。所以我最终让它工作了,只是在表上的所有字段上使用[]逃过了。非常感谢。对于这样一个简单的建议,这是有道理的。字段名选择不当。然而,他提到他能够手动运行查询…@Juan,这可能是OP在发布时犯的错误。因为他发布的查询在手动运行时甚至无法运行。哦,对不起,我没有在这里键入剩余的单词,所以我使用了where=Username。我就是这样运行它的。所以我最终让它工作了,只是在表上的所有字段上使用[]逃过了。非常感谢。为了这么简单的建议。