2011-10-22 56 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