Bug #7569 | DataColumnMapping | ||
---|---|---|---|
Submitted: | 29 Dec 2004 9:44 | Modified: | 11 Oct 2005 7:49 |
Reporter: | Test Test | Email Updates: | |
Status: | Can't repeat | Impact on me: | |
Category: | Connector / NET | Severity: | S1 (Critical) |
Version: | 1.03 | OS: | Windows (Windows XP - SP2) |
Assigned to: | Reggie Burnett | CPU Architecture: | Any |
[29 Dec 2004 9:44]
Test Test
[5 Jan 2005 17:43]
Reggie Burnett
Can you post some source code that shows this problem? Thanks
[8 Mar 2005 18:24]
Will Britton
I am also experiencing this problem. Code: // Create dataset and add table, columns, data DataSet objDataset = new DataSet(); objDataset.Tables.Add("DS_Manufacturer"); objDataset.Tables["DS_Manufacturer"].Columns.Add("Id",typeof(System.Int32)); objDataset.Tables["DS_Manufacturer"].Columns.Add("Name",typeof(System.String)); objDataset.Tables["DS_Manufacturer"].Columns.Add("OwnerId",typeof(System.Int32)); objDataset.Tables["DS_Manufacturer"].Columns.Add("UpdateSequence",typeof(System.Int32)); DataRow objRow = objDataset.Tables["DS_Manufacturer"].NewRow(); objRow["Id"] = 123123; objRow["Name"] = "Test-name"; objRow["OwnerId"] = 100; objRow["UpdateSequence"] = 123456; // Create a data adapter MySqlDataAdapter objAdapter = new MySqlDataAdapter(); // Create table and column mappings DataTableMapping objMapping = objAdapter.TableMappings.Add("Table","DS_Manufacturer"); objMapping.ColumnMappings.Add("_organisationid","OwnerId"); objMapping.ColumnMappings.Add("_UpdateSequence","UpdateSequence"); // Set the select command objAdapter.SelectCommand = new MySqlCommand("SELECT * FROM manufacturer;",objDatabase); // Use command builder to create other commands MySqlCommandBuilder objBuilder = new MySqlCommandBuilder(objAdapter); // Load the original data from the database objAdapter.Fill(objDataset); // Modify the data objDataset.Tables["DS_Manufacturer"].Rows[0]["Name"] = "New-test-name"; // Save the data to the database objAdapter.Update(objDataset); Stepping through, the Fill command populates the dataset properly, however the Update command raises System.ArgumentException : Column '_organisationid' does not belong to table DS_Manufacturer
[8 Mar 2005 19:44]
Will Britton
Suggestion for bug-fix: I tried the following, which worked, although I'm sure there must be a neater solution. In MySqlClient/CommandBuilder.cs changed the SetParamterValues private function to... private void SetParameterValues(MySqlCommand cmd, DataRow dataRow) { foreach (MySqlParameter p in cmd.Parameters) { String strMappedTableName; String strDatasetTable = dataRow.Table.TableName; System.Data.Common.DataTableMapping objMapping = _adapter.TableMappings.GetByDataSetTable(strDatasetTable); strMappedTableName = ( objMapping != null && objMapping.ColumnMappings.Contains(p.SourceColumn)) ? objMapping.ColumnMappings[p.SourceColumn].DataSetColumn : p.SourceColumn; if (p.SourceVersion == DataRowVersion.Original) // if (p.ParameterName.Length >= 8 && p.ParameterName.Substring(0, 8).Equals("Original")) p.Value = dataRow[ strMappedTableName, DataRowVersion.Original ]; else p.Value = dataRow[ strMappedTableName, DataRowVersion.Current ]; } }
[11 Oct 2005 7:49]
Vasily Kishkin
I was not able to reproduce the bug on 1.0.6. Probably the bug was fixed.