Bug #48100 Impossible to retrieve decimal value if it doesn't fit into .Net System.Decimal
| Submitted: | 15 Oct 2009 20:18 | Modified: | 5 Nov 2009 15:49 |
|---|---|---|---|
| Reporter: | Andrey Belykh | Email Updates: | |
| Status: | Closed | Impact on me: | |
| Category: | Connector / NET | Severity: | S2 (Serious) |
| Version: | 6.1.2.0 | OS: | Windows |
| Assigned to: | Reggie Burnett | CPU Architecture: | Any |
[15 Oct 2009 20:18]
Andrey Belykh
[16 Oct 2009 6:26]
Tonci Grgin
Hi Andrey and thanks for your report.
True, mscorlib throws "Value was either too large or too small for a Decimal."
Verified as described. Please lower the severity as this is actually a feature request (S4).
Test case:
using (MySqlConnection cn = new MySqlConnection("DataSource=**;Database=**;UserID=**;Password=**;PORT=**;logging=True;charset=utf8"))
{
cn.Open();
try
{
MySqlCommand cmdCreateTable = new MySqlCommand("DROP TABLE IF EXISTS bug48100", cn);
cmdCreateTable.ExecuteNonQuery();
cmdCreateTable.CommandText = "CREATE TABLE bug48100 (a decimal(36,2));";
cmdCreateTable.ExecuteNonQuery();
cmdCreateTable.CommandText = "INSERT INTO bug48100 VALUES (9999999999999999999999999999999999.99);";
cmdCreateTable.ExecuteNonQuery();
MySqlCommand cmd = new MySqlCommand();
cmd.Connection = cn;
cmd.CommandText = "SELECT * FROM bug48100";
MySqlDataReader rd = cmd.ExecuteReader();
rd.Read();
Console.Out.WriteLine("Result is: " + rd[0]);
}
catch (Exception ex)
{
Console.Out.WriteLine(DateTime.UtcNow.ToLongTimeString() + " " + "Exception: " + ex.Message);
throw;
}
}
[16 Oct 2009 14:04]
Andrey Belykh
I do agree that the proposed solution sounds like a feature request. However, what I am only interested in is getting the value. Making MySqlReader.GetDouble() to not throw would work for my purpose. I would like to leave the severity at S2 unless you have a workaround.
[16 Oct 2009 18:38]
Vladislav Vaintroub
Will using a CAST AS CHAR(N) like below work for you as workaround?
MySqlCommand cmd = new MySqlCommand("select a from long_number", conn);
try
{
decimal dec = (decimal)cmd.ExecuteScalar();
}
catch (OverflowException)
{
cmd.CommandText = "select cast(a as char(38)) from long_number";
string val = (string)cmd.ExecuteScalar();
double dbl = Convert.ToDouble(val);
}
[19 Oct 2009 16:30]
Andrey Belykh
Thanks for your response. In short, no, it's not a good workaround. We will mention this in the documentation and refer customers to this bug report.
[29 Oct 2009 21:31]
Bugs System
A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/commits/88647 772 Reggie Burnett 2009-10-29 - now exposing the MySqlDecimal type along with GetMySqlDecimal methods on data reader (bug #48100)
[29 Oct 2009 21:33]
Bugs System
A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/commits/88649 784 Reggie Burnett 2009-10-29 [merge] - now exposing the MySqlDecimal type along with GetMySqlDecimal methods on data reader (bug #48100)
[29 Oct 2009 21:34]
Reggie Burnett
Fixed in 6.0.5, 6.1.3, and 6.2.1+
[29 Oct 2009 21:38]
Bugs System
A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/commits/88653 793 Reggie Burnett 2009-10-29 [merge] - now exposing the MySqlDecimal type along with GetMySqlDecimal methods on data reader (bug #48100)
[29 Oct 2009 21:39]
Bugs System
A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/commits/88654 792 Reggie Burnett 2009-10-29 [merge] - now exposing the MySqlDecimal type along with GetMySqlDecimal methods on data reader (bug #48100)
[5 Nov 2009 15:49]
Tony Bedford
An entry has been added to the 6.0.5, 6.1.3 and 6.2.1 changelogs: It was not possible to retrieve a value from a MySQL server table, if the value was larger than that supported by the .NET type System.Decimal. MySQL Connector/NET was changed to expose the MySqlDecimal type, along with the supporting method GetMySqlDecimal.
Portions of this website are copyright © 2001, 2002 The PHP Group
Page generated in 0.068 sec. using MySQL 8.4.7-u6-cloud
Timestamp references displayed by the system are UTC.
Content reproduced on this site is the property of the
respective copyright holders.
It is not reviewed in advance
by Oracle and does not necessarily represent the opinion of
Oracle or any other party.