【发布时间】:2015-06-09 14:50:22
【问题描述】:
我正在尝试更新 MS Access 中的表,但更新操作不起作用并且我没有收到错误消息。
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; }
}
可能是什么问题?
【问题讨论】:
-
数据库中可能不存在Address_ID?因此,没有任何内容与 WHERE 子句匹配,因此不会更新任何内容。我只是猜测,仅凭您提供的信息无法确定。但是如果没有错误,那么很可能查询正在成功执行,这意味着它没有按照您的预期进行,并且对于像这样的简单查询,那么 where 条件是最明显的罪魁祸首。在那里放一个断点,看看
address.Address_ID在运行时是什么 -
这里是函数UpdateAddress的调试:地址是:Address_ID 4 long City "2222" string Contact "max" string Customer_ID 1 long FirstAddress false bool PostalCode " " string Street " " string跨度>
-
我确实有表中的最后一个 Adress_ID,即 4
-
在您正在更新的表中,是否有任何您未提供值的必填字段?另外,您能否在 dbCommand.CommandText 尝试更新表之前打印出它的值?
-
这里是:“更新地址集 [Street] = atStreet, [PostalCode] = atPostalCode, [City] = atCity, [Contact] = atContact Where [Address_ID] = atAddress_ID”。 at =@ 但是这里不允许使用这么多的@