Bug #54895 Bug in MySqlDataAdapter update method

Submitted: 29 Jun 2010 14:13 Modified: 13 Jul 2010 10:37
Reporter: Attila Aszalos Email Updates:
Status: Closed Impact on me:
None 
Category:Connector / NET Severity:S2 (Serious)
Version:6.2.3.0 OS:Windows
Assigned to: Vladislav Vaintroub CPU Architecture:Any
Tags: MySqlDataAdapter.Update; ConcurrencyException; update command

[29 Jun 2010 14:13] Attila Aszalos
Description:
When I update a value in a DataRow and call the DataAdapters Update method it gives a "Concurrency violation: the UpdateCommand affected 0 of the expected 1 records." 
The UpdateCommand is a stored procedure which contains the update command and a select command for the updated row, so that I can get the updated values back in the client application. For this the UpdatedRowSource property is set to FirstReturnedRecord.
If I remove the select command from the end of the update stored procedure it works fine. I think it should when the select command is present.

How to repeat:
CREATE TABLE `bugtable` (
  `id_auto` int(11) NOT NULL AUTO_INCREMENT,
  `field` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`id_auto`)
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=latin1

CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_getall_bugtable`()
BEGIN
	select * from bugtable;
END

CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_updatebugtable`(
    in p_id_auto int,
    in p_field varchar(50))
BEGIN
    update bugtable set `field`=p_field where id_auto=p_id_auto;
    select * from bugtable where id_auto=p_id_auto; // if this is commented out it doesn't give the exception, but I need to refresh the updated row
END

private static void testUpdate()
{
	const string SELECT_CMD = "sp_getall_bugtable"; 
	const string UPDATE_CMD = "sp_updatebugtable";
	const string TABLE_NAME = "bugtable";

	MySqlConnection conn = new MySqlConnection("server=servername;user=username;database=dbname;password=pswd;");

	DataSet ds = new DataSet();

	MySqlDataAdapter da = new MySqlDataAdapter();

	da.SelectCommand = conn.CreateCommand();
	da.SelectCommand.CommandType = CommandType.StoredProcedure;
	da.SelectCommand.CommandText = SELECT_CMD;

	da.UpdateCommand = conn.CreateCommand();
	da.UpdateCommand.CommandType = CommandType.StoredProcedure;
	da.UpdateCommand.CommandText = UPDATE_CMD;
	da.UpdateCommand.Parameters.Add("p_id_auto", MySqlDbType.Int32, 4, "id_auto");
	da.UpdateCommand.Parameters.Add("p_field", MySqlDbType.VarChar, 4, "field");
	da.UpdateCommand.UpdatedRowSource = UpdateRowSource.FirstReturnedRecord;

	da.Fill(ds, TABLE_NAME);
	ds.Tables[TABLE_NAME].Rows[0]["field"] = "newvalue"; // a value differnt from the old value => the Rows[0].RowState value changes to "Modified"

	da.Update(ds.Tables[TABLE_NAME]);// Concurrency violation: the UpdateCommand affected 0 of the expected 1 records.
}
[6 Jul 2010 17:55] Bugs System
A patch for this bug has been committed. After review, it may
be pushed to the relevant source trees for release in the next
version. You can access the patch from:

  http://lists.mysql.com/commits/112965

823 Vladislav Vaintroub	2010-07-06
      Make sure MySqlDataAdapter.Update() works for custom stored procedure driven update commands 
      that make use of UpdateRowSource.FirstReturnedRecord ( Bug#54895)
[8 Jul 2010 20:22] Bugs System
A patch for this bug has been committed. After review, it may
be pushed to the relevant source trees for release in the next
version. You can access the patch from:

  http://lists.mysql.com/commits/113176

823 Vladislav Vaintroub	2010-07-08
      Make sure MySqlDataAdapter.Update() works for custom stored procedure driven update commands 
      that make use of UpdateRowSource.FirstReturnedRecord ( Bug#54895)
[8 Jul 2010 21:12] Vladislav Vaintroub
pushed to 6.0.7, 6.1.5, 6.2.4, 6.3.3
[13 Jul 2010 10:37] Tony Bedford
An entry has been added to the 6.0.7, 6.1.5, 6.2.4, and 6.3.3 changelogs:

MySqlDataAdapter.Update() generated concurrency violations for custom stored procedure driven update commands that used UpdateRowSource.FirstReturnedRecord.

Portions of this website are copyright © 2001, 2002 The PHP Group

Page generated in 0.041 sec. using MySQL 8.4.7-u6-cloud

Timestamp references displayed by the system are UTC.
Content reproduced on this site is the property of the respective copyright holders.
It is not reviewed in advance by Oracle and does not necessarily represent the opinion of Oracle or any other party.