2011-10-22 87 views
2

我想通过c#winform接口将单个值更新到我的访问.accdb数据库中。我的SQL语句是:c#oledb更新

updateString("UPDATE Password_Table SET Password = '" + confirmnewpasswordTextBox.Text + "' WHERE Password_ID = 'user'"); 

现场明智的应该是正确的,但每当我执行updateString功能它只返回零。我可以在下面的例子中知道我做错了什么吗?

public static bool updateString(string SQL) 
    { 
     using (var connection = new OleDbConnection(connectionString)) 
     using (var command = connection.CreateCommand()) 
     { 
      connection.Open(); 

      command.CommandText = SQL; 
      command.CommandType = CommandType.Text; 

      try 
      { 
       return command.ExecuteNonQuery(); 
      } 
      catch 
      { 
       return -1;//for error 
      } 
     } 
    } 

谢谢!

更新:

System.Data.OleDb.OleDbException: Syntax error in UPDATE statement. 

嗯,我仍然无法弄清楚什么是错的,我的表是Password_Table,我试图更新一列称为密码,其中Password_ID是“用户”。

更新:发现错误!事实证明,密码就像是一个受限制的关键字,我必须在[]中覆盖它才能工作。

回答

4

代码存在严重问题。它容易受到SQL注入的影响。你应该总是使用参数化查询来避免这种情况。例如:

public static string UpdatePassword(string user, string password) 
{ 
    using (var connection = new OleDbConnection(connectionString)) 
    using (var command = connection.CreateCommand()) 
    { 
     connection.Open(); 

     command.CommandText = "UPDATE Password_Table SET Password = @pwd WHERE Password_ID = @user"; 
     command.Parameters.AddWithValue("@pwd", password); 
     command.Parameters.AddWithValue("@user", user); 

     try 
     { 
      return command.ExecuteNonQuery(); 
     } 
     catch 
     { 
      return -1;//for error 
     } 
    } 
} 

,然后调用这样的:

int rowsAffetected = UpdatePassword("user", confirmnewpasswordTextBox.Text); 

现在,如果它返回0这意味着在你的数据库没有记录相匹配的Password_ID = user条件并没有什么更新。

+0

嗯我试过这种方法,但它仍然返回-1而不是0 .. – user776914

+0

@ user776914,所以引发异常。它是什么? –

+0

我已经更新了例外的问题。这个异常将与command.commandtext相关吗? – user776914