Bug #5900 serializing of floating point parameters (double, numeric, single, decimal)
Submitted: 5 Oct 2004 16:54 Modified: 13 Oct 2004 19:24
Reporter: Roman Kunert
Status: Closed
Category:Connector/Net Severity:S1 (Critical)
Version:1.0.0 OS:Microsoft Windows (Windows 2000)
Assigned to: Reggie Burnett Target Version:

[5 Oct 2004 16:54] Roman Kunert
Description:
Method SerializeToText() from class MySqlParameter does not care about national type
conversion differences for floating point types:

all numeric variables get serialized with the call:

valStr = paramValue.ToString();

in many local environments this call will for example convert the double 6.7d into "6,7",
as a comma is used for the delimeter instead of the dot

this results in a complaint about a difference between the number of parameters and the
number of variables (because variables are comma seperated and "6,7" now represent two
values)

How to repeat:
see description

Suggested fix:
to fix this quickly I changed the method SerializeToText as follows (it works for me now,
but a more elegant solution should be found):

internal void SerializeToText(...) 
{

...

if (paramValue is MySqlDateTime) 
{
  valStr = (paramValue as
MySqlDateTime).ToMySqlString(conn.InternalConnection.Driver.Version.isAtLeast(4,1,0));
}	

// we have to take care of national differences regarding the decimal delimiters 
else if(paramValue is MySqlNumber || paramValue is MySqlSingle || paramValue is
MySqlDouble || paramValue is MySqlDecimal) 
{
  valStr = paramValue.ToString().Replace(",",".");
} 
else 
{
  valStr = paramValue.ToString();
}
...
}
[13 Oct 2004 19:24] Reggie Burnett
Thank you for your bug report. This issue has been committed to our
source repository of that product and will be incorporated into the
next release.

If necessary, you can access the source repository and build the latest
available version, including the bugfix, yourself. More information 
about accessing the source trees is available at
    http://www.mysql.com/doc/en/Installing_source_tree.html