Please do not reply to this email- if you want to comment on the bug, go to the URL shown below and enter your comments there.
Changed by [EMAIL PROTECTED] http://bugzilla.ximian.com/show_bug.cgi?id=82150 --- shadow/82150 2007-07-20 07:44:40.000000000 -0400 +++ shadow/82150.tmp.30525 2007-07-20 07:44:40.000000000 -0400 @@ -0,0 +1,273 @@ +Bug#: 82150 +Product: Mono: Runtime +Version: 1.2 +OS: GNU/Linux [Other] +OS Details: Ubuntu Feisty Fawn 64bit +Status: NEW +Resolution: +Severity: +Priority: Wishlist +Component: io-layer +AssignedTo: [EMAIL PROTECTED] +ReportedBy: [EMAIL PROTECTED] +QAContact: [EMAIL PROTECTED] +TargetMilestone: --- +URL: +Cc: +Summary: Npgsql Parameter bug. likely cause of bug# 82148 + +NpgsqlAdapter's UpdateCommand and InsertCommand's parameters must have +match NpgsqlParameter ordering + +prior to placing: + +this code ==> +insertDetail.Parameters.Add("p_ecmtp_rec_id", NpgsqlDbType.Varchar); +insertDetail.Parameters["p_ecmtp_rec_id"].Value = ecmtRecId; + +to the last statement ==> insertDetail.Parameters.Add("p_remark", +NpgsqlDbType.Varchar); +insertDetail.Parameters["p_remark"].SourceColumn = "remark"; + + +the NpgsqlDataAdapter always feed '0' to insertCommand's paramater +p_ecmtp_rec_id. see the Postgresql log file below. + + +why should the order of adding NpgsqlParameter should matter in Mono's +Npgsql? in .NET's Npgsql, the order of adding parameters to UpdateCommand +and InsertCommand, doesn't matter, any ways NpgsqlParamater adding +arrangement is, it just works. + + + + +public override void Mono_ECMTP_Save(string ecmtRecId, DataTable[] dts) +{ + + NpgsqlConnection c = Connect(); + + NpgsqlTransaction tx = c.BeginTransaction(); + + NpgsqlDataAdapter da = new NpgsqlDataAdapter(); + + try + { + NpgsqlCommand insertHeader = new NpgsqlCommand( + @"insert into ecmtp(ecmtp_rec_id, company_code, shoe_section_code, +material_code, testing_level) + values(:p_ecmtp_rec_id, :p_company_code, :p_shoe_section_code, +:p_material_code, :p_testing_level)", c); + + + insertHeader.Parameters.Add("p_ecmtp_rec_id", NpgsqlDbType.Varchar); + insertHeader.Parameters["p_ecmtp_rec_id"].Value = ecmtRecId; + + insertHeader.Parameters.Add("p_company_code", NpgsqlDbType.Varchar); + insertHeader.Parameters["p_company_code"].SourceColumn = "company_code"; + + insertHeader.Parameters.Add("p_material_code", NpgsqlDbType.Varchar); + insertHeader.Parameters["p_material_code"].SourceColumn = "material_code"; + + insertHeader.Parameters.Add("p_shoe_section_code", NpgsqlDbType.Varchar); + insertHeader.Parameters["p_shoe_section_code"].SourceColumn = +"shoe_section_code"; + + + insertHeader.Parameters.Add("p_testing_level", NpgsqlDbType.Integer); + insertHeader.Parameters["p_testing_level"].SourceColumn = "testing_level"; + + + + + NpgsqlCommand updateHeader = new NpgsqlCommand( + @"update ecmtp set + company_code = :p_company_code, + shoe_section_code = :p_shoe_section_code, + material_code = :p_material_code, + testing_level = :p_testing_level + where ecmtp_rec_id = :o_ecmtp_rec_id + and :p_ecmtp_rec_id = :o_ecmtp_rec_id + ", c); + + + + updateHeader.Parameters.Add("o_ecmtp_rec_id", NpgsqlDbType.Varchar); + updateHeader.Parameters["o_ecmtp_rec_id"].SourceColumn = "ecmtp_rec_id"; + updateHeader.Parameters["o_ecmtp_rec_id"].SourceVersion = +DataRowVersion.Original; + + updateHeader.Parameters.Add("p_ecmtp_rec_id", NpgsqlDbType.Varchar); + updateHeader.Parameters["p_ecmtp_rec_id"].SourceColumn = "ecmtp_rec_id"; + updateHeader.Parameters["p_ecmtp_rec_id"].SourceVersion = +DataRowVersion.Current; + + updateHeader.Parameters.Add("p_company_code", NpgsqlDbType.Varchar); + updateHeader.Parameters["p_company_code"].SourceColumn = "company_code"; + + updateHeader.Parameters.Add("p_material_code", NpgsqlDbType.Varchar); + updateHeader.Parameters["p_material_code"].SourceColumn = "material_code"; + + updateHeader.Parameters.Add("p_shoe_section_code", NpgsqlDbType.Varchar); + updateHeader.Parameters["p_shoe_section_code"].SourceColumn = +"shoe_section_code"; + + updateHeader.Parameters.Add("p_testing_level", NpgsqlDbType.Integer); + updateHeader.Parameters["p_testing_level"].SourceColumn = "testing_level"; + + + da.DeleteCommand = null; + da.InsertCommand = insertHeader; + da.UpdateCommand = updateHeader; + + + if (dts[0] != null) + da.Update(dts[0]); + + + + + NpgsqlCommand insertDetail = new NpgsqlCommand( + @"insert into ecmtp_parameter(ecmtp_rec_id, ecmtp_parameter_rec_id, +color_code, parameter_code, unit, value_span_code, value, method, remark) + values( :p_ecmtp_rec_id , :p_ecmtp_parameter_rec_id, :p_color_code, +:p_parameter_code, :p_unit, :p_value_span_code, :p_value, :p_method, +:p_remark)", c); + + + + + + insertDetail.Parameters.Add("p_ecmtp_parameter_rec_id", +NpgsqlDbType.Varchar); + insertDetail.Parameters["p_ecmtp_parameter_rec_id"].SourceColumn = +"ecmtp_parameter_rec_id"; + + + insertDetail.Parameters.Add("p_color_code", NpgsqlDbType.Varchar); + insertDetail.Parameters["p_color_code"].SourceColumn = "color_code"; + + + Console.WriteLine("ecmt rec id: " + ecmtRecId); + + insertDetail.Parameters.Add("p_parameter_code", NpgsqlDbType.Varchar); + insertDetail.Parameters["p_parameter_code"].SourceColumn = "parameter_code"; + + + + insertDetail.Parameters.Add("p_unit", NpgsqlDbType.Varchar); + insertDetail.Parameters["p_unit"].SourceColumn = "unit"; + + + insertDetail.Parameters.Add("p_value_span_code", NpgsqlDbType.Varchar); + insertDetail.Parameters["p_value_span_code"].SourceColumn = +"value_span_code"; + + + insertDetail.Parameters.Add("p_value", NpgsqlDbType.Numeric); + insertDetail.Parameters["p_value"].SourceColumn = "value"; + + insertDetail.Parameters.Add("p_method", NpgsqlDbType.Varchar); + insertDetail.Parameters["p_method"].SourceColumn = "method"; + + insertDetail.Parameters.Add("p_remark", NpgsqlDbType.Varchar); + insertDetail.Parameters["p_remark"].SourceColumn = "remark"; + + + + insertDetail.Parameters.Add("p_ecmtp_rec_id", NpgsqlDbType.Varchar); + insertDetail.Parameters["p_ecmtp_rec_id"].Value = ecmtRecId; + + + + + + + + NpgsqlCommand updateDetail = new NpgsqlCommand( + @"update ecmtp_parameter set + color_code = :p_color_code, + parameter_code = :p_parameter_code, + unit = :p_unit, + value_span_code = :p_value_span_code, + value = :p_value, + method = :p_method, + remark = :p_remark + where ecmtp_parameter_rec_id = :o_ecmtp_parameter_rec_id + and :p_ecmtp_parameter_rec_id = :o_ecmtp_parameter_rec_id", c); + + + + + + updateDetail.Parameters.Add("p_ecmtp_parameter_rec_id", +NpgsqlDbType.Varchar); + updateDetail.Parameters["p_ecmtp_parameter_rec_id"].SourceColumn = +"ecmtp_parameter_rec_id"; + updateDetail.Parameters["p_ecmtp_parameter_rec_id"].SourceVersion = +DataRowVersion.Current; + + + updateDetail.Parameters.Add("o_ecmtp_parameter_rec_id", +NpgsqlDbType.Varchar); + updateDetail.Parameters["o_ecmtp_parameter_rec_id"].SourceColumn = +"ecmtp_parameter_rec_id"; + updateDetail.Parameters["o_ecmtp_parameter_rec_id"].SourceVersion = +DataRowVersion.Original; + + + updateDetail.Parameters.Add("p_color_code", NpgsqlDbType.Varchar); + updateDetail.Parameters["p_color_code"].SourceColumn = "color_code"; + + + updateDetail.Parameters.Add("p_parameter_code", NpgsqlDbType.Varchar); + updateDetail.Parameters["p_parameter_code"].SourceColumn = "parameter_code"; + + updateDetail.Parameters.Add("p_unit", NpgsqlDbType.Varchar); + updateDetail.Parameters["p_unit"].SourceColumn = "unit"; + + + updateDetail.Parameters.Add("p_value_span_code", NpgsqlDbType.Varchar); + updateDetail.Parameters["p_value_span_code"].SourceColumn = +"value_span_code"; + + + updateDetail.Parameters.Add("p_value", NpgsqlDbType.Numeric); + updateDetail.Parameters["p_value"].SourceColumn = "value"; + + updateDetail.Parameters.Add("p_method", NpgsqlDbType.Varchar); + updateDetail.Parameters["p_method"].SourceColumn = "method"; + + + updateDetail.Parameters.Add("p_remark", NpgsqlDbType.Varchar); + updateDetail.Parameters["p_remark"].SourceColumn = "remark"; + + + NpgsqlCommand deleteDetail = new NpgsqlCommand( + @"delete from ecmtp_parameter + where ecmtp_parameter_rec_id = :p_ecmtp_parameter_rec_id", c); + + deleteDetail.Parameters.Add("p_ecmtp_parameter_rec_id", +NpgsqlDbType.Varchar); + deleteDetail.Parameters["p_ecmtp_parameter_rec_id"].SourceColumn = +"ecmtp_parameter_rec_id"; + + da.DeleteCommand = deleteDetail; + da.UpdateCommand = updateDetail; + da.InsertCommand = insertDetail; + + + if (dts[1] != null) + da.Update(dts[1]); + + + tx.Commit(); + + } + catch (NpgsqlException ex) + { + tx.Rollback(); + throw new Exception(ex.Message + "\n" + ex.StackTrace); + } + +} _______________________________________________ mono-bugs maillist - [email protected] http://lists.ximian.com/mailman/listinfo/mono-bugs
