c#
  • syntax-error
  • oledb
  • oledbconnection
  • 2016-11-21 67 views 0 likes 
    0

    以下是示例代码: 其他所有工作,但不断收到语法更新错误? 已检查SQL,并作为外部SQL查询工作。OleDbConnection更新语法错误,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; 
        } 
    
    +0

    您正在使用哪个RDBMS并打印myQuery变量并查看它打印的内容 – Rahul

    +0

    Provider = Microsoft.ACE.OLEDB.12.0:using:Database.accdb类型文件,它是本地文件。 在调试时为Update获取正确的值,但一旦它命中ExecuteNonQuery()方法,它会直接捕获异常ex。 没有数据库连接问题和字段和数据库名称在SQL中是正确的。 – Sam

    +0

    什么是例外的细节? –

    回答

    2

    那是因为你的WHERE部分如下图所示。 User是在MS Access一个reserve word,因此需要使用[]

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

    而且你目前的做法是受到SQL注入攻击进行转义。请按照另一个答案中的建议使用参数化查询。

    +0

    很好的保留字。 –

    +0

    这是有道理的。字段名称选择不当。然而,他提到他能够手动运行查询... – JuanR

    +0

    @Juan,这可能是由OP发布时发生的错误。导致他发布的查询在手动运行时甚至不会运行。 – Rahul

    1

    使用参数,而不是在一个字符串串接值:

    https://msdn.microsoft.com/en-us/library/system.data.oledb.oledbcommand.parameters(v=vs.110).aspx

    下面是使用语句代码示例(推荐别人,对资源的适当处置) :

    using (OleDbConnection conn = new OleDbConnection(ConnString)) 
    { 
        using (OleDbCommand cmd = new OleDbCommand(SqlString, conn)) 
        { 
        cmd.CommandType = CommandType.Text; 
        cmd.Parameters.AddWithValue("FirstName", txtFirstName.Text); 
        cmd.Parameters.AddWithValue("LastName", txtLastName.Text); 
        conn.Open(); 
        cmd.ExecuteNonQuery(); 
        } 
    } 
    
    +0

    查询听起来像是声音,它在我看来,它不起作用的原因是输入必须包含导致驱动程序错误的字符(因为查询在外部工作)。很高兴让它成为评论,但在我看来,他似乎有一个问题(为什么它不起作用),我提供了一个答案(因为你串联字符串,而不是使用参数)让我知道你为什么认为它应该是如果你有一个引人注目的论点,我会做到这一点 – JuanR

    +0

    删除评论,因为现在你的编辑增加了价值但这不是真正的问题在这里看到我的回答 – Rahul

    +0

    我在代码中添加了参数。仍然以相同的语法结束。我的天。把我推上了城墙。 – Sam

    相关问题