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=82147 --- shadow/82147 2007-07-20 06:59:36.000000000 -0400 +++ shadow/82147.tmp.28998 2007-07-20 06:59:36.000000000 -0400 @@ -0,0 +1,240 @@ +Bug#: 82147 +Product: Mono: Runtime +Version: 1.2 +OS: other +OS Details: Ubuntu +Status: NEW +Resolution: +Severity: +Priority: Wishlist +Component: remoting +AssignedTo: [EMAIL PROTECTED] +ReportedBy: [EMAIL PROTECTED] +QAContact: [EMAIL PROTECTED] +TargetMilestone: --- +URL: +Cc: +Summary: just want to apologize for the last bug report i made, suspecting Mono's System.Data and Remoting incompatibility with Windows as the bugs. the real bug is on NpgsqlParameter + +there is an error for dangling NpgsqlParamater + +my recommendation is to at least make npgsql library consistent on windows +and on mono. npgsqldataadapter on mono misbehaves when there is dangling +npgsqlparameter. don't know which which npgsql version is ideal when +dealing with dangling npgsqlparamater, but i think the npgsql on .net +behaves like silent error. or at least make the two npgsql consistent with +each other, so the developer would be more happy, i'm tracing the error for +two days, i was about to analyze Npgsql source code, just doesn't have +enough time to dabble with it :) + + +kudos to Mono and Npgsql team for providing good tools to developers :) + + +i can now say that Linux + Mono Remoting + Npgsql + PostgreSQL stack works! :) + + +the code below (from my remoting middletier) works after i removed the +p_mobile npgsqlparameter: + + +public override void Company_Save(string companyCode, DataSet delta) +{ +NpgsqlConnection c = Connect(); + +NpgsqlTransaction tx = c.BeginTransaction(); + + +NpgsqlCommand updateCommand = new NpgsqlCommand( + @"update company set + company = :p_company, + address_1 = :p_address_1, + address_2 = :p_address_2, + + zip_code = :p_zip_code, + city = :p_city, + country = :p_country, + telephone = :p_telephone, + fax = :p_fax, + homepage = :p_homepage, + further_information = :p_further_information, + + is_client = :p_is_client, + is_end_client = :p_is_end_client, + is_testing_institution = :p_is_testing_institution, + is_supplier = :p_is_supplier, + is_competitor = :p_is_competitor + + where + + company_code = :o_company_code + + -- prevents stupidity :D modifying the primary key + + and :p_company_code = :o_company_code + + + -- company type shouldn't change + + and :p_company_type_code = :o_company_type_code + ", c); + + + + + +updateCommand.Parameters.Add("o_company_type_code", NpgsqlDbType.Varchar); +updateCommand.Parameters["o_company_type_code"].SourceColumn = +"company_type_code"; +updateCommand.Parameters["o_company_type_code"].SourceVersion = +DataRowVersion.Original; + + +updateCommand.Parameters.Add("p_company_type_code", NpgsqlDbType.Varchar); +updateCommand.Parameters["p_company_type_code"].SourceColumn = +"company_type_code"; +updateCommand.Parameters["p_company_type_code"].SourceVersion = +DataRowVersion.Current; + + + + +updateCommand.Parameters.Add("o_company_code", NpgsqlDbType.Varchar); +updateCommand.Parameters["o_company_code"].SourceColumn = "company_code"; +updateCommand.Parameters["o_company_code"].SourceVersion = +DataRowVersion.Original; + +updateCommand.Parameters.Add("p_company_code", NpgsqlDbType.Varchar); +updateCommand.Parameters["p_company_code"].SourceColumn = "company_code"; +updateCommand.Parameters["p_company_code"].SourceVersion = +DataRowVersion.Current; + + + +updateCommand.Parameters.Add("p_company", NpgsqlDbType.Varchar); +updateCommand.Parameters["p_company"].SourceColumn = "company"; + + + + + + +updateCommand.Parameters.Add("p_address_1", NpgsqlDbType.Varchar); +updateCommand.Parameters["p_address_1"].SourceColumn = "address_1"; + + +updateCommand.Parameters.Add("p_address_2", NpgsqlDbType.Varchar); +updateCommand.Parameters["p_address_2"].SourceColumn = "address_2"; + + +updateCommand.Parameters.Add("p_zip_code", NpgsqlDbType.Varchar); +updateCommand.Parameters["p_zip_code"].SourceColumn = "zip_code"; + + +updateCommand.Parameters.Add("p_city", NpgsqlDbType.Varchar); +updateCommand.Parameters["p_city"].SourceColumn = "city"; + + +updateCommand.Parameters.Add("p_country", NpgsqlDbType.Varchar); +updateCommand.Parameters["p_country"].SourceColumn = "country"; + +updateCommand.Parameters.Add("p_telephone", NpgsqlDbType.Varchar); +updateCommand.Parameters["p_telephone"].SourceColumn = "telephone"; + + +/*updateCommand.Parameters.Add("p_mobile", NpgsqlDbType.Varchar); +updateCommand.Parameters["p_mobile"].SourceColumn = "mobile";*/ + + + + + +updateCommand.Parameters.Add("p_fax", NpgsqlDbType.Varchar); +updateCommand.Parameters["p_fax"].SourceColumn = "fax"; +updateCommand.Parameters["p_fax"].SourceVersion = DataRowVersion.Current; + + + +updateCommand.Parameters.Add("p_homepage", NpgsqlDbType.Varchar); +updateCommand.Parameters["p_homepage"].SourceColumn = "homepage"; + + +updateCommand.Parameters.Add("p_further_information", NpgsqlDbType.Varchar); +updateCommand.Parameters["p_further_information"].SourceColumn = +"further_information"; + + +updateCommand.Parameters.Add("p_is_client", NpgsqlDbType.Boolean); +updateCommand.Parameters["p_is_client"].SourceColumn = "is_client"; + +updateCommand.Parameters.Add("p_is_end_client", NpgsqlDbType.Boolean); +updateCommand.Parameters["p_is_end_client"].SourceColumn = "is_end_client"; + +updateCommand.Parameters.Add("p_is_testing_institution", NpgsqlDbType.Boolean); +updateCommand.Parameters["p_is_testing_institution"].SourceColumn = +"is_testing_institution"; + +updateCommand.Parameters.Add("p_is_supplier", NpgsqlDbType.Boolean); +updateCommand.Parameters["p_is_supplier"].SourceColumn = "is_supplier"; + + +updateCommand.Parameters.Add("p_is_competitor", NpgsqlDbType.Varchar); +updateCommand.Parameters["p_is_competitor"].SourceColumn = "is_competitor"; + + +NpgsqlDataAdapter da = new NpgsqlDataAdapter(); + +da.InsertCommand = insertCommand; +da.UpdateCommand = updateCommand; + + +Console.WriteLine("Faxed: " + +delta.Tables["company"].Rows[0]["fax"].ToString()); + +da.Update(delta, "company"); + + +------------------ + +prior to commenting the dangling npgsqlparameter(p_mobile), here's the +result(on linux mono's npgsql), obtained from /var/log/postgresql: + + +update company set + company = 'Xiamen C&D', + address_1 = 'aoeuaoeuX', + address_2 = '', + + zip_code = '', + city = 'Xiamen', + country = 'China', + telephone = '592 2033 404 ext 7708', + fax = NULL, + homepage = NULL, + further_information = NULL, + + is_client = NULL, + is_end_client = NULL, + is_testing_institution = NULL, + is_supplier = NULL, + is_competitor = NULL + +where + + company_code = '550' + + -- prevents stupidity :D modifying the primary key + + and '550' = '550' + + + -- company type shouldn't change + + and 'C' = 'C' + + + +note: npgsql on windows just ignore the dangling npgsqlparameter, hence +manifesting a "clean" program, or maybe it can be considered as silent +error. Francisco Figueiredo Jr should at least make the behavior identical +on both platform _______________________________________________ mono-bugs maillist - [email protected] http://lists.ximian.com/mailman/listinfo/mono-bugs
