http://bugzilla.novell.com/show_bug.cgi?id=547251


           Summary: Decimal parameter of SqlCommand causes exception when
                    executing Command in non-english localizations
    Classification: Mono
           Product: Mono: Class Libraries
           Version: 2.4.x
          Platform: x86-64
        OS/Version: RHEL 5
            Status: NEW
          Severity: Critical
          Priority: P5 - None
         Component: Sys.Data.SqlClient
        AssignedTo: [email protected]
        ReportedBy: [email protected]
         QAContact: [email protected]
          Found By: ---


User-Agent:       Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.14)
Gecko/2009082707 Firefox/3.0.14 (.NET CLR 3.5.30729)

I decided to create a new bug report based on
https://bugzilla.novell.com/show_bug.cgi?id=319320 cause it was closed many
years ago in the wrong way.
The problem is still there and it was hidden cause you are using english
localization. It happens in localizations that use "," as decimal separator
instead of "." 

Reproducible: Always

Steps to Reproduce:
1.Create a test table into an SQL Server database with a field of type float.
2. Run this piece of code:

System.Threading.Thread.CurrentThread.CurrentCulture = new
System.Globalization.CultureInfo("it-IT");
SqlConnection conn = new
SqlConnection("server=servername;database=databasename;User
ID=username;Pwd=password;");
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
cmd.CommandText = "insert into table (numeric_field) VALUES (@P1)";
SqlParameter p = new SqlParameter("@P1", 12.54);
cmd.Parameters.Add(p);
try {
  conn.Open();
  cmd.ExecuteNonQuery();
  Console.WriteLine("Done.");
} catch (Exception ex) {
  Console.WriteLine(ex.ToString());
} finally {
  conn.Close();
}
Actual Results:  
You receive the error:
System.Data.SqlClient.SqlException: Must pass parameter number 4 and subsequent
parameters as '@name = value'. After the form '@name = value' has been used,
all subsequent parameters must be passed in the form '@name = value'.
  at System.Data.SqlClient.SqlConnection.ErrorHandler (System.Object sender,
Mono.Data.Tds.Protocol.TdsInternalErrorMessageEventArgs e) [0x00032] in
/root/download/mono/mono-2.4.2.3/mcs/class/System.Data/System.Data.SqlClient/SqlConnection.cs:314
 
  at Mono.Data.Tds.Protocol.Tds.OnTdsErrorMessage
(Mono.Data.Tds.Protocol.TdsInternalErrorMessageEventArgs e) [0x0000b] in
/root/download/mono/mono-2.4.2.3/mcs/class/Mono.Data.Tds/Mono.Data.Tds.Protocol/Tds.cs:1593
 
  at Mono.Data.Tds.Protocol.Tds.ProcessMessage (TdsPacketSubType subType)
[0x000ef] in
/root/download/mono/mono-2.4.2.3/mcs/class/Mono.Data.Tds/Mono.Data.Tds.Protocol/Tds.cs:1633
 
  at Mono.Data.Tds.Protocol.Tds.ProcessSubPacket () [0x00130] in
/root/download/mono/mono-2.4.2.3/mcs/class/Mono.Data.Tds/Mono.Data.Tds.Protocol/Tds.cs:1680
 
  at Mono.Data.Tds.Protocol.Tds.NextResult () [0x0004a] in
/root/download/mono/mono-2.4.2.3/mcs/class/Mono.Data.Tds/Mono.Data.Tds.Protocol/Tds.cs:612
 
  at Mono.Data.Tds.Protocol.Tds.SkipToEnd () [0x00005] in
/root/download/mono/mono-2.4.2.3/mcs/class/Mono.Data.Tds/Mono.Data.Tds.Protocol/Tds.cs:685
 
  at Mono.Data.Tds.Protocol.Tds.ExecuteQuery (System.String sql, Int32 timeout,
Boolean wantResults) [0x00036] in
/root/download/mono/mono-2.4.2.3/mcs/class/Mono.Data.Tds/Mono.Data.Tds.Protocol/Tds.cs:560
 
  at Mono.Data.Tds.Protocol.Tds70.Execute (System.String commandText,
Mono.Data.Tds.TdsMetaParameterCollection parameters, Int32 timeout, Boolean
wantResults) [0x00034] in
/root/download/mono/mono-2.4.2.3/mcs/class/Mono.Data.Tds/Mono.Data.Tds.Protocol/Tds70.cs:540
 
  at System.Data.SqlClient.SqlCommand.Execute (Boolean wantResults) [0x0020f]
in
/root/download/mono/mono-2.4.2.3/mcs/class/System.Data/System.Data.SqlClient/SqlCommand.cs:532
 
  at System.Data.SqlClient.SqlCommand.ExecuteNonQuery ()

Expected Results:  
It should inser the new record. If you change
System.Threading.Thread.CurrentThread.CurrentCulture = new
System.Globalization.CultureInfo("it-IT");

with

System.Threading.Thread.CurrentThread.CurrentCulture = new
System.Globalization.CultureInfo("en-GB");

it works.

-- 
Configure bugmail: http://bugzilla.novell.com/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the QA contact for the bug.
You are the assignee for the bug.
_______________________________________________
mono-bugs maillist  -  [email protected]
http://lists.ximian.com/mailman/listinfo/mono-bugs

Reply via email to