Bug #61114 | ODBC doesn't support Uint32 / Uint64 ? <-> OdbcType.Int / BigInt | ||
---|---|---|---|
Submitted: | 10 May 2011 11:02 | Modified: | 10 May 2011 13:12 |
Reporter: | Aswin Coolsaet | Email Updates: | |
Status: | Verified | Impact on me: | |
Category: | Connector / ODBC | Severity: | S3 (Non-critical) |
Version: | connector 5.1.8 | OS: | Windows (7) |
Assigned to: | Bogdan Degtyariov | CPU Architecture: | Any |
Tags: | ODBC Unsigned Int, uint, Uint32, Uint64 |
[10 May 2011 11:02]
Aswin Coolsaet
[10 May 2011 13:11]
Aswin Coolsaet
According to: Configuring Parameters and Parameter Data Types (ADO.NET) http://msdn.microsoft.com/en-us/library/yy6y35y8(v=VS.100).aspx Uint32 -> BigInt Uint64 -> Numeric I was focussing on: OdbcType Enumeration http://msdn.microsoft.com/en-us/library/system.data.odbc.odbctype.aspx OdbcType.Int : Exact numeric value with precision 10 and scale 0 (signed: –2[31] <= n <= 2[31] – 1, unsigned:0 <= n <= 2[32] – 1) (SQL_INTEGER).
[10 May 2011 13:12]
Bogdan Degtyariov
Hi Aswin, Thanks for reporting the bug in MySQL Connector/ODBC. I tried your test case and it failed with the following exception: Failed to convert parameter value from a UInt64 to a Int64. at System.Data.Odbc.OdbcParameter.ProcessAndGetParameterValue() at System.Data.Odbc.OdbcParameter.PrepareForBind(OdbcCommand command, Int16 ordinal, Int32& parameterBufferSize) at System.Data.Odbc.OdbcParameterCollection.CalcParameterBufferSize(OdbcCommand command) at System.Data.Odbc.OdbcCommand.ExecuteReaderObject(CommandBehavior behavior, String method, Boolean needReader, Object[] methodArguments, SQL_API odbcApiMethod) at System.Data.Odbc.OdbcCommand.ExecuteReaderObject(CommandBehavior behavior, String method, Boolean needReader) at System.Data.Odbc.OdbcCommand.ExecuteNonQuery() Setting the bug status to Verified.
[20 Dec 2022 5:02]
Bogdan Degtyariov
Posted by developer: Re-verified against 8.0.32. It still fails when the parameter value is UInt64.MaxValue. Otherwise it works. //////////////////////////////////////////////////////////// using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Data; using System.Data.Odbc; namespace bug26474476 { class Program { static void Main(string[] args) { OdbcConnection con = new OdbcConnection("DSN=test"); con.Open(); OdbcCommand cmd = new OdbcCommand("DROP TABLE IF EXISTS tab26474476", con); cmd.ExecuteNonQuery(); cmd.CommandText = "CREATE TABLE tab26474476 (my_uint_64 BIGINT UNSIGNED)"; cmd.ExecuteNonQuery(); cmd.CommandText = "INSERT INTO tab26474476 (my_uint_64) VALUES (1)"; cmd.ExecuteNonQuery(); OdbcParameter odbc_param = new OdbcParameter("my_uint_64", UInt64.MaxValue); cmd.CommandText = "UPDATE tab26474476 set my_uint_64 = ?"; cmd.Parameters.Add(odbc_param); cmd.ExecuteNonQuery(); Console.WriteLine("DONE!"); } } }