2013-12-16 68 views
2

我有我的程序中的客户类和访问数据库中的客户表,我想通过给定的值更新数据库中的客户余额。 我写了所有似乎是正确的语句,但不幸的是数据库不受影响。 这是我使用的提前更新DB 感谢法数据库没有更新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 [email protected] WHERE [email protected]"; 

     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; 
} 
+0

为什么关闭连接两次? – Brian

+0

只是复制错误。 :) –

+0

我想添加一个通知,当我用静态值(不带参数)重写了commandtext时,它会成功更新数据库 –

回答

3

您有:

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 [email protected] WHERE [email protected]"; 

     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 [email protected] WHERE [email protected]"; 

     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非常特别是动物当谈到他们如何被添加/处理。从文档我地连接:

因此,在这种OleDbParameter对象添加到OleDbParameterCollection的顺序必须直接对应于问号占位符在命令文本的参数的位置。

简而言之,你必须相同顺序,它们出现在你的命令文本添加参数。