ado.net - 数据库未更新 ADO.Net

标签 ado.net

我的程序中有一个客户类,在访问数据库中有一个客户表,我想按给定值更新数据库中的客户余额。 我写了所有看起来正确的语句,但不幸的是数据库没有受到影响。 这是我用来更新数据库的方法 提前致谢

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/

相关文章:

c# - 在什么情况下 SqlConnection 会自动加入环境 TransactionScope 事务?

c# - 如何在从中选择的表发生变化的 ADO.NET 中安全地创建查询?

c# - 读取大型 xml 文件的最快方法

MySql永久连接错误 `Unable to connect`

c# - 使用 COUNT(*) 运行 SQL 查询,以便我们知道有多少记录将通过 DataReader

c# - 安全删除 ForEach 中的 DataRow

c# - 使用 "DbConnection"时,我应该使用 "using"还是 try-catch-finally 来使用 DbConnection.close() 关闭连接?

c# - 刷新强类型数据集

c# - 通过安全和性能感知将整个数据表存储在 Viewstate 中是否合适

c# - 有没有办法测试 SQL 语句以查看是否可以在 C# 中执行?