2015-06-09 37 views
1

我試圖更新MS Access中的表,但更新操作不起作用,我沒有收到錯誤。在Winforms(C#)中OleDb參數查詢:沒有錯誤,但沒有更新行

rowsAffected爲0,所以沒有更新。

這裏是我的代碼:

public bool UpdateAddress(AddressModel address) 
    { 
     using (OleDbCommand dbCommand = new OleDbCommand()) 
     { 
      // Set the command object properties 
      dbCommand.Connection = new OleDbConnection(this.ConnectionString); 
      dbCommand.CommandType = CommandType.Text; 
      dbCommand.CommandText = "Update Addresses " + 
     " Set [Street] = @Street, [PostalCode] = @PostalCode, " + 
     " [City] = @City, [Contact] = @Contact"+ 
     " Where [Address_ID] = @Address_ID"; 

      // Add the input parameters to the parameter collection 
      dbCommand.Parameters.AddWithValue("@Street", address.Street); 
      dbCommand.Parameters.AddWithValue("@PostalCode", address.PostalCode); 
      dbCommand.Parameters.AddWithValue("@City", address.City); 
      dbCommand.Parameters.AddWithValue("@Address_ID", address.Address_ID); 
      dbCommand.Parameters.AddWithValue("@Contact", address.Contact); 

      // Open the connection, execute the query and close the connection 
      dbCommand.Connection.Open(); 
      var rowsAffected = dbCommand.ExecuteNonQuery(); 
      dbCommand.Connection.Close(); 

      return rowsAffected > 0; 
     } 
    } 
AddressModel-Class: 
    public class AddressModel 
{ 
    public Int64 Address_ID { get; set; } 

    public Int64 Customer_ID { get; set; } 

    public string Street { get; set; } 

    public string PostalCode { get; set; } 

    public string City { get; set; } 

    public string Contact { get; set; } 

    public bool FirstAddress { get; set; } 
} 

可能是什麼問題呢?

+1

也許Address_ID在數據庫中不存在?因此沒有任何內容會匹配WHERE子句,因此沒有內容會被更新。我只是猜測,只有你提供的信息是不可能的。但是如果沒有錯誤,那麼很可能是查詢成功執行,這意味着它只是沒有達到你期望的目標,並且使用這樣的簡單查詢,where條件是最明顯的罪魁禍首。把一個斷點在那裏,看看'address.Address_ID'在運行時 – musefan

+0

這裏是功能UpdateAddress的調試:地址是:\t \t ADDRESS_ID 長 \t \t市\t「2222」 \t串 \t \t聯繫\t 「最大」 \t串 \t \t CUSTOMER_ID \t 1個\t長 \t \t FirstAddress \t假\t布爾 \t \t POSTALCODE \t「」 \t串 \t \t街\t「」 \t串 – Orientos

+0

,我也有最後Adress_ID,這是4,表 – Orientos

回答

3

使用System.Data.OleDb,參數嚴格爲位置。 OleDb忽略參數名稱並且只關注參數佔位符在CommandText中出現的順序。因此,您需要.Add.AddWithValue這些參數的順序與它們出現在CommandText中的順序完全相同。

在您的情況下,您需要顛倒最後兩個dbCommand.Parameters.AddWithValue語句的順序:@Address_ID必須是最後添加的參數,因爲其佔位符最後出現在CommandText中。

+0

非常感謝你。我不會在100年內找到它:) – Orientos

+0

@Mohammad_N如果它解決了您的問題,您應該將Gord的回答標記爲答案。 –

+0

多數民衆贊成在:)。我忘了 – Orientos

相關問題