我的程序中有一个客户类,在访问数据库中有一个客户表,我想按给定值更新数据库中的客户余额。 我写了所有看起来正确的语句,但不幸的是数据库没有受到影响。 这是我用来更新数据库的方法 提前致谢
public static bool UpdateCustomer(Customer customer)
{
bool EditSucceeded = false;
string connectionString = @"Provider=Microsoft.ACE.OLEDB.12.0; Data Source=C:\GarageProTuning.accdb;";
using (OleDbConnection _con = new OleDbConnection(connectionString))
{
string commandText = "UPDATE Customer SET Balance=@Balance WHERE CustomerID=@CustomerID";
using (OleDbCommand _cmd = new OleDbCommand(commandText, _con))
{
_cmd.Parameters.AddWithValue("@CustomerID", customer.CustomerID);
_cmd.Parameters.AddWithValue("@Balance", customer.Balance);
_con.Open();
int rowsAffected = _cmd.ExecuteNonQuery();
if (rowsAffected > 0)
EditSucceeded = true;
_con.Close();
}
}
return EditSucceeded;
}
最佳答案
你有:
public static bool UpdateCustomer(Customer customer)
{
bool EditSucceeded = false;
string connectionString = @"Provider=Microsoft.ACE.OLEDB.12.0; Data Source=C:\GarageProTuning.accdb;";
using (OleDbConnection _con = new OleDbConnection(connectionString))
{
string commandText = "UPDATE Customer SET Balance=@Balance WHERE CustomerID=@CustomerID";
using (OleDbCommand _cmd = new OleDbCommand(commandText, _con))
{
_cmd.Parameters.AddWithValue("@CustomerID", customer.CustomerID);
_cmd.Parameters.AddWithValue("@Balance", customer.Balance);
_con.Open();
int rowsAffected = _cmd.ExecuteNonQuery();
if (rowsAffected > 0)
EditSucceeded = true;
_con.Close();
}
}
return EditSucceeded;
}
您需要的是:
public static bool UpdateCustomer(Customer customer)
{
bool EditSucceeded = false;
string connectionString = @"Provider=Microsoft.ACE.OLEDB.12.0; Data Source=C:\GarageProTuning.accdb;";
using (OleDbConnection _con = new OleDbConnection(connectionString))
{
string commandText = "UPDATE Customer SET Balance=@Balance WHERE CustomerID=@CustomerID";
using (OleDbCommand _cmd = new OleDbCommand(commandText, _con))
{
_cmd.Parameters.AddWithValue("@Balance", customer.Balance); // Explanation below
_cmd.Parameters.AddWithValue("@CustomerID", customer.CustomerID);
_con.Open();
int rowsAffected = _cmd.ExecuteNonQuery();
if (rowsAffected > 0)
EditSucceeded = true;
_con.Close();
}
}
return EditSucceeded;
}
OleDbCommand.Parameters就如何添加/加工而言,它们是一种非常特殊的动物。从我链接的文档中:
Therefore, the order in which OleDbParameter objects are added to the OleDbParameterCollection must directly correspond to the position of the question mark placeholder for the parameter in the command text.
简而言之,您必须按照参数在命令文本中出现的顺序添加参数。
关于ado.net - 数据库未更新 ADO.Net,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20615362/