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=82047 --- shadow/82047 2007-07-09 10:42:30.000000000 -0400 +++ shadow/82047.tmp.23571 2007-07-09 10:42:30.000000000 -0400 @@ -0,0 +1,128 @@ +Bug#: 82047 +Product: Mono: Class Libraries +Version: 1.2 +OS: All +OS Details: +Status: NEW +Resolution: +Severity: +Priority: Wishlist +Component: Sys.Data.SqlClient +AssignedTo: [EMAIL PROTECTED] +ReportedBy: [EMAIL PROTECTED] +QAContact: [EMAIL PROTECTED] +TargetMilestone: --- +URL: +Cc: +Summary: Error when trying to add a row with a DateTime field into an Italian SqlServer. + +Description of Problem: +Error when trying to add a new row with a DateTime field into an Italian +SqlServer. + +Steps to reproduce the problem: +1. Create a database with one table with one DateTime field on an Italian +SqlServer database +2. Run the following simple program + + class Program + { + static void Main(string[] args) + { + SqlConnection conn = new SqlConnection("..."); + string cmdText = "SELECT * FROM TestMONODateTime"; + + SqlCommand cmd = new SqlCommand(cmdText, conn); + SqlDataAdapter da = new SqlDataAdapter(cmd); + DataSet ds = new DataSet(); + + SqlCommandBuilder cmdBuilder = new SqlCommandBuilder(da); + + da.Fill(ds); + DataTable dt = ds.Tables[0]; + + DataRow row = dt.NewRow(); + row["DateTimeField"] = new DateTime(2007, 07, 10); + dt.Rows.Add(row); + da.Update(ds); + } + } + +Actual Results: +New row cannot be added because DateTime format is not recognized as a +valid one. Here is the detailed error (message is in italian, but basically +it says that it is impossible to convert from varchar to datetime) + + +Unhandled Exception: System.Data.SqlClient.SqlException: Si รจ verificato un +errore durante la conversione del tipo di dati da varchar a datetime. + at System.Data.SqlClient.SqlConnection.ErrorHandler (System.Object +sender, Mono.Data.Tds.Protocol.TdsInternalErrorMessageEventArgs e) +[0x00000] in +/tmp/scratch/BUILD/mono-1.2.4/mcs/class/System.Data/System.Data.SqlClient/SqlConnection.cs:300 + + at (wrapper delegate-invoke) +System.MulticastDelegate:invoke_void_object_TdsInternalErrorMessageEventArgs +(object,Mono.Data.Tds.Protocol.TdsInternalErrorMessageEventArgs) + at Mono.Data.Tds.Protocol.Tds.OnTdsErrorMessage +(Mono.Data.Tds.Protocol.TdsInternalErrorMessageEventArgs e) [0x0000b] in +/tmp/scratch/BUILD/mono-1.2.4/mcs/class/Mono.Data.Tds/Mono.Data.Tds.Protocol/Tds.cs:1343 + + at Mono.Data.Tds.Protocol.Tds.ProcessMessage (TdsPacketSubType subType) +[0x000ef] in +/tmp/scratch/BUILD/mono-1.2.4/mcs/class/Mono.Data.Tds/Mono.Data.Tds.Protocol/Tds.cs:1383 + + at Mono.Data.Tds.Protocol.Tds.ProcessSubPacket () [0x00130] in +/tmp/scratch/BUILD/mono-1.2.4/mcs/class/Mono.Data.Tds/Mono.Data.Tds.Protocol/Tds.cs:1431 + + at Mono.Data.Tds.Protocol.Tds.NextResult () [0x0004a] in +/tmp/scratch/BUILD/mono-1.2.4/mcs/class/Mono.Data.Tds/Mono.Data.Tds.Protocol/Tds.cs:478 + + at System.Data.SqlClient.SqlDataReader.NextResult () [0x00026] in +/tmp/scratch/BUILD/mono-1.2.4/mcs/class/System.Data/System.Data.SqlClient/SqlDataReader.cs:1117 + + at System.Data.SqlClient.SqlDataReader..ctor +(System.Data.SqlClient.SqlCommand command) [0x00000] + at (wrapper remoting-invoke-with-check) +System.Data.SqlClient.SqlDataReader:.ctor (System.Data.SqlClient.SqlCommand) + at System.Data.SqlClient.SqlCommand.ExecuteReader (CommandBehavior +behavior) [0x0002f] in +/tmp/scratch/BUILD/mono-1.2.4/mcs/class/System.Data/System.Data.SqlClient/SqlCommand.cs:471 + + +Expected Results: +New row should be correctly added to the table in the database + +How often does this happen? +Always + +Additional Information: +Here are the 2 (with Mono and MS.NET) actual queries run on the db, as seen +using SQL Profiler: + - with Mono on Linux: exec sp_executesql N'INSERT INTO [TestMONODateTime] +([DateTimeField]) VALUES (@p1)', N'@p1 datetime', @p1='Jul 10 2007 +12:00:00 AM' + - with MS.NET on Win: exec sp_executesql N'INSERT INTO [TestMONODateTime] +([DateTimeField]) VALUES (@p1)', N'@p1 datetime', @p1 = 'lug 10 2007 +12:00:00:000AM' + +As you can see with MS.NET the month name is expressed in Italian and +that's indipendent from the client thread culture. +With Mono, instead it is always expressed in English. This is due to the +conversion performed in +'/trunk/mcs/class/Mono.Data.Tds/Mono.Data.Tds.Protocol/Tds70.cs'; see the +method FormatParameter() - when the parameter is datetime (it uses +InvariantCulture): + ... + case "datetime": + DateTime d = Convert.ToDateTime (parameter.Value); + value = +String.Format(System.Globalization.CultureInfo.InvariantCulture, "'{0:MMM +dd yyyy hh:mm:ss tt}'", d ); + ... + +I haven't tried, but I suppose the same issue could be repro on other +localized SqlServer. + +Cheers, +Stefano
_______________________________________________ mono-bugs maillist - [email protected] http://lists.ximian.com/mailman/listinfo/mono-bugs
